Primeiramente precisamos conhecer as regras de colocação dos dígitos do CPF.
O CPF é composto por 11 dígitos, 2 pontos e 1 traço que separa os dígito verificadores.
O nº de CPF usa 2 dígitos verificadores para saber se o número é válido ou não. Porém, este é um tipo de código que não mostra onde esta o erro, somente diz que tem algum erro.
A regra de validação do CPF é a seguinte:
Sendo 012.345.678-90 um CPF qualquer, temos que
n1 <- 0
n2 <- 1
n3 <-2
n4 <- 3
n5 <- 4
n6 <- 5
n7 <- 6
n8 <- 7
n9 <- 8
n10 <- 9
n11 <- 0 , são cada número do CPF da esquerda para a direita.
1º > Precisamos somar, multiplicando de n1 a n9 e depois dividir por 11 e obter o resto da divisão, que é o que nos interessa.
SoMa <- (n1 * 10) + (n2 * 9) + (n3 * 8) + (n4 * 7) + (n5 * 6) + (n6 * 5) + (n7 * 4) + (n8 * 3) + (n9 * 2)
ReStO <- SoMa / 11 Pega somente o resto da divisão
2º > Verificamos se o resto é menor que 2, caso seja, o primeiro digito verificador será 0, caso não seja, o primeiro dígito verificador será 11 – ReStO.
SE ReStO < 2 ENTAO
DIGITO_1 <- 0
SENÃO
DIGITO_1 <- ReStO – 11
3º > Vamos agora obter o 2 dígito verificador. Procedemos como acima, alterando portanto, os número s serem multiplicados.
SoMa <- (n1 * 11) + (n2 * 10) + (n3 * 9) + (n4 * 8) + (n5 * 7) + (n6 * 6) + (n7 * 5) + (n8 * 4) + (n9 * 3) + (DIGITO_1 * 2 )
ReStO <-SoMa / 11 Pega somente o resto da divisão
4º > Verificamos se o resto é menor que 2, caso seja, o segundo digito verificador será 0, caso não seja, o dígito verificador será 11 – ReStO.
SE ReStO < 2 ENTAO
DIGITO_2 <- 0
SENÃO
DIGITO_2 <- ReStO – 11
5º > Pronto! Agora é só compararmos os dígitos verificadores obtidos (DIGITO_1 e DIGITO_2) com o número de CPF que queremos validar.
SE DIGITO_1 = n10 ENTAO
SE DIGITO_2 = n11 ENTAO
Escreva “CPF válido!”
SENAO
Escreva “CPF inválido!”
SENAO
Escreva “CPF inválido!”
...............................................................................
O algoritmo completo:
CPF = 012.345.678-90
n1 <- 0
n2 <- 1
n3 <- 2
n4 <- 3
n5 <- 4
n6 <- 5
n7 <- 6
n8 <- 7
n9 <- 8
n10 <- 9
n11 <- 0
//Para o primeiro digito
SoMa <- (n1 * 10) + (n2 * 9) + (n3 * 8) + (n4 * 7) + (n5 * 6) + (n6 * 5) + (n7 * 4) + (n8 * 3) + (n9 * 2)
ReStO <- SoMa / 11 //Pega somente o resto da divisão
SE ReStO < 2 ENTAO
DIGITO_1 <- 0
SENÃO
DIGITO_1 <- ReStO – 11
//Para o segundo dígito
SoMa <- (n1 * 11) + (n2 * 10) + (n3 * 9) + (n4 * 8) + (n5 * 7) + (n6 * 6) + (n7 * 5) + (n8 * 4) + (n9 * 3) + (DIGITO_1 * 2 )
ReStO <- SoMa / 11 //Pega somente o resto da divisão
SE ReStO < 2 ENTAO
DIGITO_2 <- 0
SENÃO
DIGITO_2 <- ReStO – 11
SE DIGITO_1 = n10 ENTAO
SE DIGITO_2 = n11 ENTAO
Escreva “CPF válido!”
SENAO
Escreva “CPF inválido!”
SENAO
Escreva “CPF inválido!”
Em PHP ficaria assim:
function verifica_cpf($cpf){
$cpf = trim(str_replace('-','',str_replace('.','',$cpf)));
#DIGITOS VERIFICADORES
$D1 = NULL;
$D2 = NULL;
$n1 = $cpf{0};
$n2 = $cpf{1};
$n3 = $cpf{2};
$n4 = $cpf{3};
$n5 = $cpf{4};
$n6 = $cpf{5};
$n7 = $cpf{6};
$n8 = $cpf{7};
$n9 = $cpf{8};
$n10 = $cpf{9};
$n11 = $cpf{10};
#Primeiro Digito
$resto = ( ($n1 * 10) + ($n2 * 9) + ($n3 * 8) + ($n4 * 7) + ($n5 * 6) + ($n6 * 5) + ($n7 * 4) + ($n8 * 3) + ($n9 * 2) ) % 11;
$resto < d1 ="0" d1 ="11">
#Segundo Digito
$resto = ( ($n1 * 11) + ($n2 * 10) + ($n3 * 9) + ($n4 * 8) + ($n5 * 7) + ($n6 * 6) + ($n7 * 5) + ($n8 * 4) + ($n9 * 3) + ($D1 * 2 ) ) % 11;
$resto < 2 ? $D2 ="0" : $D2 = 11 - $resto;
if ($D1 == $n10 && $D2 == $n11){
return 'correto';
}
else {
return 'errado';
}
}
print(verifica_cpf('012.345.678-90));
