Buscar

Calculo do dígito de cpf em pascal

Código

{ 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.

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Arquivos
Adicionada dia: 24/06/07
Por: Elivaldo
Visualizada: 8031 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009