terça-feira, 1 de abril de 2014

Post - 0 | Verificando CPF no Delphi



Nesse post irei mostrar como podemos realizar a verificação de qualquer CPF digitado, informando se o mesmo é válido ou não.
Monte no seu Delphi uma tela similar a que está logo abaixo:



No formulário contém:
2 Labels
2 Edits
1 Botão

O próximo passo é criar uma Unit que guardará a função verificadora. Crie uma Unit e coloque o seguinte código nela:

unit ValidaCPF;

interface
function isCPF(CPF: string): boolean;
function imprimeCPF(CPF: string): string;

implementation
uses SysUtils; // necessário para utilizar a função "StrToInt"

function isCPF(CPF: string): boolean;
var  dig10, dig11: string;
    s, i, r, peso: integer;
begin
// length - retorna o tamanho da string do CPF (CPF é um número formado por 11 dígitos)
  if ((CPF = '00000000000') or (CPF = '11111111111') or
      (CPF = '22222222222') or (CPF = '33333333333') or
      (CPF = '44444444444') or (CPF = '55555555555') or
      (CPF = '66666666666') or (CPF = '77777777777') or
      (CPF = '88888888888') or (CPF = '99999999999') or
      (length(CPF) <> 11))
     then begin
            isCPF := false;
            exit;
          end;

// "try" - protege o código para eventuais erros de conversão de tipo através da função "StrToInt"
  try
{ *-- Cálculo do 1o. Digito Verificador --* }
    s := 0;
    peso := 10;
    for i := 1 to 9 do
    begin
// StrToInt converte o i-ésimo caractere do CPF em um número
      s := s + (StrToInt(CPF[i]) * peso);
      peso := peso - 1;
    end;
    r := 11 - (s mod 11);
    if ((r = 10) or (r = 11))
       then dig10 := '0'
    else str(r:1, dig10); // converte um número no respectivo caractere numérico

{ *-- Cálculo do 2o. Digito Verificador --* }
    s := 0;
    peso := 11;
    for i := 1 to 10 do
    begin
      s := s + (StrToInt(CPF[i]) * peso);
      peso := peso - 1;
    end;
    r := 11 - (s mod 11);
    if ((r = 10) or (r = 11))
       then dig11 := '0'
    else str(r:1, dig11);

{ Verifica se os digitos calculados conferem com os digitos informados. }
    if ((dig10 = CPF[10]) and (dig11 = CPF[11]))
       then isCPF := true
    else isCPF := false;
  except
    isCPF := false
  end;
end;

function imprimeCPF(CPF: string): string;
begin
  imprimeCPF := copy(CPF, 1, 3) + '.' + copy(CPF, 4, 3) + '.' +
    copy(CPF, 7, 3) + '-' + copy(CPF, 10, 2);
end;

end.


Salve a Unit. (Eu coloquei o nome de “ValidaCPF”)

Após criar a Unit que armazena a função que fará verificação do número informado adicione a mesma à Unit principal. (Para adicionar vá no menu File > Use Unit ou Alt + F11).
Agora dê um duplo clique no botão coloque o código abaixo:

procedure TForm1.Button1Click(Sender: TObject);

begin

//Compara se os números informados pelo usuário batem com o cálculo da função “isCPF” da Unit “ValidaCPF”

  if isCPF(Edit1.Text)

     then Edit2. Text := imprimeCPF(Edit1.Text) //Repete o CPF no Edit2.Text – Se repetir então está correto

  else Edit2.Text := 'Erro: CPF inválido !!!'; //Acusa o CPF como inválido

end.

Clique aqui para baixar o fonte
Pronto! Seu projeto agora verifica corretamente os CPFs informados.

Qualquer dúvida contatem-me por e-mail: wesleymenezzes@gmail.com
Obrigado e não esqueçam de curtir e compartilhar nossos posts. Deus abençoe.

Nenhum comentário:

Postar um comentário