[DELPHI] VALIDAR CPF


Com o exemplo a seguir podemos facilmente verificar se o texto digitado é um número de CPF (Cadastro de Pessoas Físicas) válido.

Abra o Delphi e crie um novo projeto através do menu File -> New -> VCL Forms Application - Delphi, e altere as propriedade do Form:

Caption = VALIDAR CPF
Name = Frm_Principal
Position = poDesktopCenter

Adicione ao formulário um TLabel, um TEdit e um TButton disponível na paleta Standard do Delphi (Tool Palette -> Standard) e altere suas propriedades conforme baixo:

PROPERTIES TLABEL:
Caption  = CPF

PROPERTIES TEDIT1:
Name = edtCPF

PROPERTIES TBUTTON:
Caption  = Validar
Name = btnValidar

Deixe o layout parecido com o da imagem a seguir.


Acesse o código do Frm_Principal através do menu View -> Toggle Form/Unit ou pressionando F12.

Na seção private declarations adicione o código abaixo:

private
    { Private declarations }
    function ValidaCPF(CPF: string): Boolean;
Com o cursor posicionado na mesma linha da function, pressione CTRL + SHIFT + C, para criar a estrutura da function.

Deixe o código ValidaCPF da seguinte forma:

function TFrm_Principal.ValidaCPF(CPF: string): Boolean;
var
  i: Integer;
  cpfSoNumero: String;
  cpfRepetido: Boolean;
  digito1, digito2: Integer;
begin
  result := False;
  // Limpa o que não for numero
  cpfSoNumero := '';
  for i := 1 To length(CPF) do
  begin
    Case char(CPF[i]) of
      '0' .. '9':
        cpfSoNumero := cpfSoNumero + CPF[i];
    End;
  end;

  // verifica se possui os 11 digitos
  if length(cpfSoNumero) <> 11 then
  begin
    exit;
  end;

  // testar se o cpf é repetido como 000.000.000-00
  cpfRepetido := True;
  for i := 2 to length(cpfSoNumero) do
  begin
    if cpfSoNumero[1] <> cpfSoNumero[i] then
    begin
      // se o cpf possui um digito diferente ele passou no teste
      cpfRepetido := False;
      break;
    end;
  end;
  // se o CPF é composto por numeros repetido retorna true
  if (cpfRepetido) then
  begin
    exit;
  end;

  // executa o calculo para o primeiro digito verificador
  digito1 := 0;
  for i := 1 to 9 do
  begin
    digito1 := digito1 + (StrToInt(cpfSoNumero[10 - i]) * (i + 1));
  end;
  { formula do primeiro verificador soma=1°*2+2°*3+3°*4.. até 9°*10 digito1 = 11 - soma mod 11 se digito > 10 digito1 = 0 }
  digito1 := ((11 - (digito1 mod 11)) mod 11) mod 10;
  // verifica se o 1° digito confere
  if inttostr(digito1) <> cpfSoNumero[10] then
  begin
    exit;
  end;

  // executa o calculo para o segundo digito verificador
  digito2 := 0;
  for i := 1 to 10 do
  begin
    digito2 := digito2 + (StrToInt(cpfSoNumero[11 - i]) * (i + 1));
  end;
  { formula do segundo verificador soma=1°*2+2°*3+3°*4.. até 10°*11 digito2 = 11 - soma mod 11 se digito > 10 digito2 = 0 }
  digito2 := ((11 - (digito2 mod 11)) mod 11) mod 10;
  // confere o 2° digito verificador
  if inttostr(digito2) <> cpfSoNumero[11] then
  begin
    exit;
  end;

  // se chegar até aqui o CPF é valido
  result := True;
end;

Volte para o Frm_Principal através do menu View -> Toggle Form/Unit ou pressionando F12.

Dê um duplo no btnValidar e adicione o código abaixo:

procedure TFrm_Principal.btnValidarCPFClick(Sender: TObject);
begin
  if ValidaCPF(edtCPF.Text) then
    Application.MessageBox('CPF válido.', 'Aviso', mb_iconinformation + mb_ok)
  else
    Application.MessageBox('CPF inválido', 'Aviso', MB_ICONERROR + mb_ok);
end;

Salve as alterações (File -> Save All), coloque o nome uPrincipal para Unit e ValidarCPF para o nome do projeto.

Pronto, execute a aplicação (menu Run -> Run ou Pressione F9) e veja o resultado.

Gostou? Deixe seu comentário... Convido você a seguir meu blog, sua presença é bem vinda!【ツ】

Nenhum comentário:

Postar um comentário