针对 PHP 的公积金验证代码
下面的代码是一个PHP函数,根据文章中的解释,优化为具有最少的圈复杂度 巴西公积金验证方法 - 个人注册. 在第二个数字化测试仪的计算时略有变化. 而不是从第二个数字开始, 代码从第一个开始并使用值 11 作为乘数. 另一个明显的变化是,为了避免比较知道我们是否在第九位和十进制数字, 我将值零分配给最后一个元素 (指数 10) 减少一个比较.
使用的算法是 1 在前面引用的文章中进行了解释,并且有一个小技巧可以避免与其他等于 10 这是制作模块 10 其余的.
// Codigo que valida um CPF informado quanto a validade de seus dígitos verificadores.
/**
*
* Verifica se um CPF é válido
* @author Marcos Regis <marcos@marcosregis.com>
* @param string $cpf
* @return bool
*/
function validar(string $cpf): bool
{
if (strlen($cpf) != 11) {
return false;
}
$elementos = (array)str_split($cpf);
$elementos[10] = 0; // Reduz uma comparação no calculo de $somaB
$somaA = 0;
$somaB = 0;
foreach ($elementos as $indice => $elemento) {
$multiplicador = count($elementos) - $indice;
$somaA += (int)$elemento * (int)($multiplicador > 2 ? $multiplicador - 1 : 0);
$somaB += (int)$elemento * (int)$multiplicador;
}
$moduloA = (($somaA * 10) % 11) % 10;
$moduloB = (($somaB * 10) % 11) % 10;
return preg_replace('#\d{9}(\d{2})$#', '$1', $cpf) == $moduloA . $moduloB;
}
您可以测试此代码 这里.
一个回应
[…;] PHP版本. […;]