Função para checar CPF
Função para checar CPF
abr 11Muitos programadores tem dúvidas à respeito da validação do cpf.
De acordo com o algoritmo de validação do cpf, montei a função abaixo em php que realizará a validação do número do cpf digitado pelo usuário.
O cpf é passado por parâmetro através da função: checaCpf(numCpf);
Se o cpf existir ele vai retornar TRUE senão FALSE;
A explicação do algoritmo está nos comentários do código.
/**
* O CPF é composto por onze algarismos, onde os dois últimos dígitos verificadores, são criados a partir dos nove primeiros.
**/
function checaCpf($string)
{
//Remove os pontos do cpf
$string = str_replace('.','', $string);
//Explode a variavel e transforma em um array
$array_cpf = explode('-', $string);
//Pegamos o valor da primeira chave do array
$cpf = array_shift($array_cpf);
//Variáveis de soma
$soma_primeiro = 0;
$soma_segundo = 0;
//Arrays contadores
//O primeiro dígito é calculado com a distribuição dos dígitos 10, 9, 8, 7, 6, 5, 4, 3, 2
//O segundo dígito é calculado com a distribuição dos dígitos 11,10, 9, 8, 7, 6, 5, 4, 3, 2
$array_numeros_primeiro = array(10,9,8,7,6,5,4,3,2);
$array_numeros_segundo = array(11,10,9,8,7,6,5,4,3,2);
/*
Calculo para somar o primeiro digito:
----------------------------------------
Multiplica-se o valor de cada coluna com o encontrado no array
CPF: 1 1 1 2 2 2 3 3 3
Valores Definido: 10 9 8 7 6 5 4 3 2
-------------------
10 9 8 14 12 15 12 9 6
Soma todos os valores encontrado da multiplicação: 10 + 9 + 8 + 14 + 12 + 15 + 12 + 9 + 6
*/
for($x = 0; $x < 9; $x++) $soma_primeiro += (substr($cpf, $x, 1) * $array_numeros_primeiro[$x]);
$int_primeiro = (int)($soma_primeiro / 11);
$resto_primeiro = ($soma_primeiro % 11);
//Se o resto da divisão for menor que 2 o primeiro digito é zero
//Senão o primeiro digito é o valor obtido da subtração de (11 - $resto_primeiro)
if($resto_primeiro < 2) $digito_primeiro = 0;
else $digito_primeiro = 11 - $resto_primeiro;
/*
Calculo para somar o segundo digito:
----------------------------------------
Multiplica-se o valor de cada coluna com o encontrado no array
CPF: 1 1 1 2 2 2 3 3 3 9
Valores Definido: 11 10 9 8 7 6 5 4 3 2
-------------------
11 10 9 16 14 15 12 9 18
Soma todos os valores encontrado da multiplicação: 11 + 10 + 9 + 16 + 14 + 15 + 12 + 9 + 18
*/
for($x = 0; $x < 10; $x++) $soma_segundo += (substr($cpf . $digito_primeiro, $x, 1) * $array_numeros_segundo[$x]);
$int_segundo = (int)($soma_segundo / 11);
$resto_segundo = ($soma_segundo % 11);
//Se o resto da divisão for menor que 2 o segundo digito é zero
//Senão o segundo digito é o valor obtido da subtração de (11 - $resto_segundo)
if($resto_segundo < 2) $digito_segundo = 0; else $digito_segundo = 11 - $resto_segundo; //Concatena o digito do primeiro valor encontrado com o segundo valor encontrado $digito = $digito_primeiro . $digito_segundo; //Verifica se o valor do digito calculado é igual ao valor do digito informado if($digito == end($array_cpf)) return true; else return false; } //Cpf Teste $cpf = '111.222.333-99'; if(!checaCpf($cpf)) echo 'Cpf Inválido'; echo 'Cpf Ok'; ?>
