{ O programa abaixo calcula o digito verificador do CPF
---------------------------------------------------------
O programa recebe o numero do CPF, sem o digito, e cal-
cula os 2 digitos separados, multiplicando o cpf infor-
mado de traz pra frente, por 2, por 3, ate 10, e acumula
a soma desta multiplicacao. Se o resto da divisao por 11
for menor que 2, entao o 1§ digito eh = 0 (zero), se for
2 ou mais, o digito sera 11 menos o resto da divisao da
soma por 11. Para calcular o 2§ digito concatena-se o 1§
digito ao CPF informado, faz a divisao seguindo os passos
do 1§ digito, agora de 2 ate 11 acumulando a soma dessa
multiplicacao. Se o resto da divisao por 11 for menor que
2, entao o 2§ digito eh = 0 (zero), se nao o digito sera
11 menos o resto da divosao da soma2 por 11.
---------------------------------------------------------
Autor : Elivaldo Silva
} program calcula_cpf; uses
crt; var
num,resto,cpf : longint;
dv1,dv2,soma1,soma2,i : integer; begin
clrscr;
writeln(#10' Programa Calcula CPF'#10); write ('Digite o CPF sem o digito: ');
readln (cpf); { inicializacao das variaveis }
num := cpf;
soma1 := 0;
soma2 := 0;
i := 2; { calculando o primeiro digito do CPF } while num > 0 do begin
resto := num mod 10;
soma1 := (resto*i) + soma1;
num := num div 10;
i := i+1; end; { se o resto da divisao por 11 eh menor que 2 } { entao o digito eh = 0 } if soma1 mod 11 < 2 then
dv1 := 0 { se nao o digito eh 11 menos o resto da divisao por 11 } else
dv1 := 11-(soma1 mod 11);
i := 3;
num := cpf; { unindo o 1§ digito ao cpf para calculo do 2§ digito }
soma2 := (dv1*2) + soma2; { calculando o 2§ digito do cpf } while num > 0 do begin
resto := num mod 10;
soma2 := (resto*i) + soma2;
num := num div 10;
i := i+1; end; if soma2 mod 11 < 2 then
dv2 := 0 else
dv2 := 11-(soma2 mod 11);
writeln(#10'CPF.: ',cpf,'-',dv1,dv2);
readkey; end.