Codigo de validação de CPF para PHP
O código abaixo é de uma função em PHP otimizada para ter o menor numero de complexidade ciclomática que consegui baseado na explicação presente no artigo Algoritimo de validação de CPF brasileiro – Cadastro de Pessoa Física. Ele tem uma ligeira alteração no momento do cálculo do segundo digitido verificador. Ao invés de começar pelo segundo algarismo, o codigo começa pelo primeiro e usa o valor 11 como multiplicador. Outra alteração visivel é que para evitar a necessidade de comparação para saber se estamos no nono e decimo digitos, atribuo o valor zero ao ultimo elemento (indice 10) para reduzir mais uma comparação.
O algoritmo utilizado é o método 1 explicado no artigo citado anteriormente e há um pequeno truque para evitar a comparação com o resto igual a 10 que é fazer o módulo de 10 do resto.
// 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;
}
Você pode testar esse código aqui.
One Response
[…;] Versão PHP. […;]