Algoritmo do CPF
Para exemplificar o processo vamos gerar um CPF válido, calculando os
dígitos verificadores de um número hipotético, 111.444.777-XX
Calculando o Primeiro Dígito Verificador
O primeiro dígito verificador do CPF é calculado utilizando-se o seguinte
algoritmo.
1) Distribua os 9 primeiros dígitos em um quadro colocando
os pesos 10, 9, 8, 7, 6, 5, 4, 3, 2 abaixo da esquerda para a direita, conforme
representação abaixo:
1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 |
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
2) Multiplique os valores de cada coluna:
1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 |
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
10 | 9 | 8 | 28 | 24 | 20 | 28 | 21 | 14 |
3) Calcule o somatório dos resultados (10+9+…+21+14) = 162
4) O resultado obtido (162) será divido por 11. Considere
como quociente apenas o valor inteiro, o resto da divisão será responsável pelo
cálculo do primeiro dígito verificador.
Vamos acompanhar: 162 dividido por 11 obtemos 14 como quociente e 8 como
resto da divisão. Caso o resto da divisão seja menor que 2, o nosso primeiro
dígito verificador se torna 0 (zero), caso contrário subtrai-se o valor obtido
de 11, que é nosso caso. Sendo assim nosso dígito verificador é 11-8, ou seja,
3 (três). Já temos portanto parte do CPF, confira: 111.444.777-3X.
Calculando o Segundo Dígito Verificador
1) Para o cálculo do segundo dígito será usado o primeiro
dígito verificador já calculado. Montaremos uma tabela semelhante a anterior só
que desta vez usaremos na segunda linha os valores 11,10,9,8,7,6,5,4,3,2 já que
estamos incorporando mais um algarismo para esse cálculo. Veja:
1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 3 |
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
2) Na próxima etapa faremos como na situação do cálculo do
primeiro dígito verificador, multiplicaremos os valores de cada coluna e
efetuaremos o somatório dos resultados obtidos: (11+10+…+21+6) = 204.
1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 3 |
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
11 | 10 | 9 | 32 | 28 | 24 | 35 | 28 | 21 | 6 |
3) Realizamos novamente o cálculo do módulo 11. Dividimos o
total do somatório por 11 e consideramos o resto da divisão.
Vamos acompanhar: 204 dividido por 11 obtemos 18 como quociente e 6 como
resto da divisão.
4) Caso o valor do resto da divisão seja menor que 2, esse
valor passa automaticamente a ser zero, caso contrário (como no nosso caso) é
necessário subtrair o valor obtido de 11 para se obter o dígito verificador.
Logo, 11-6= 5, que é o nosso segundo dígito verificador.
Neste caso chegamos ao final dos cálculos e descobrimos que os dígitos
verificadores do nosso CPF hipotético são os números 3 e 5,
portanto o CPF ficaria assim: 111.444.777-35.
O gerador de CPF apresentado funciona com base neste algoritmo. A rotina de
gerar CPF ’s válidos, inicialmente sorteia 9 números. Calcula-se o 1o dígito
verificador e integra-se o mesmo aos 9 números iniciais. Prossegue-se com o
cálculo do segundo dígito verificador como ensinado. Ao final, o criador de CPF
emite um número de CPF válido.
o algoritmo vai ficar assim, agora cabe você montar em outros códigos de
progrmação
Algoritmo ConfereCPF
VAR inteiro: d,a array[1..11]
inteiro: i,s1,s2
inteiro: d10, d11
inicio
escrever(’digite o CPF deixando um espaco entre os digitos’);
para i de 1 até 11 faça
ler(d[i]);
;
{multiplicar os digitos por um valor}
para i de 1 até 9 faça
a[i] := d[i]*(11 - i);
{calcular a soma s1}
s1 := 0;
para i de 1 até 9 faça
s1 := s1+a[i];
{calcular o digito 10}
d10 := 11 - (s1 mod 11);
se (d10 > 9) então d10 := 0;
{multiplicar os digitos por um valor}
para i de 1 até 10 faça
a[i] := d[i]*(12 - i);
{calcular a soma s2}
s2 := 0;
para i de 1 até 10 faça
s2 := s2 + a[i];
{calcular o digito 11}
d11 := 11 - (s2 mod 11);
se (d11 > 9) então d11 := 0;
{conferir se o CPF é válido}
se (d10 = d[10]) e (d11 = d[11]) então
escrever(’CPF valido’)
senão
escrever(’CPF invalido’);
fim do algoritmo