Analitcs

Pesquisar no conteúdo do blog.atlabs.com.br

segunda-feira, 1 de outubro de 2012

DELPHI - Validação CPF

Reações: 
//Retirei do planeta delphi, identei e criei função de limpeza de caracteres:

Function ValidacaoCPF(CPF:string):boolean;
var
  I               : integer;
  Want            : char;
  Wvalid          : boolean;
  Wdigit1,Wdigit2 : integer;
  Function StrNumber(S : String) : String;
  var
    X : Integer;
  begin
    Result := '';
    For X := 1 To Length(S) do
    begin
      Case Char(S[X]) of
        '0'..'9' : Result := Result + S[X];
      End;
    end;
  end;
begin
  Wdigit1 := 0;
  Wdigit2 := 0;
  Want    := CPF[1];//variavel para testar se o cpf é repetido como 111.111.111-11
  CPF := StrNumber(CPF); // Limpa o que não for numero
  if Length(CPF) < 11 then
  begin
    Result := False;
    exit;
  end;
  //testar se o cpf é repetido como 111.111.111-11
  for I := 1 to length(CPF) do
  begin
    if CPF[i] <> Want then
    begin
      Wvalid := True;  // se o cpf possui um digito diferente ele passou no primeiro teste
      Break;
    end;
  end;
  // se o CPF é composto por numeros repetido retorna falso
  if not Wvalid then
  begin
    Result := False;
    Exit;
  end;
  //executa o calculo para o primeiro verificador
  for i := 1 to 9 do
  begin
    Wdigit1 := Wdigit1 + (StrToInt(CPF[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}
  Wdigit1:= ((11 - (Wdigit1 mod 11))mod 11) mod 10;
  //verifica se o 1° digito confere
  if IntToStr(Wdigit1) <> CPF[10] then
  begin
    Result := false;
    Exit;
  end;
  for i:=1 to 10 do
  begin
    Wdigit2 := Wdigit2 + (StrToInt(CPF[11-i])*(I+1));
  end;
  {formula do segundo verificador
  soma=1°*2+2°*3+3°*4.. até 10°*11
  digito1 = 11 - soma mod 11
  se digito > 10 digito1 =0}
  Wdigit2 := ((11 - (Wdigit2 mod 11))mod 11) mod 10;
  // confere o 2° digito verificador
  if IntToStr(Wdigit2) <> CPF[11] then
  begin
    Result := False;
    Exit;
  end;
  //se chegar até aqui o CPF é valido
  Result := True;end;
// Usando:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ValidacaoCPF(Edit1.Text) then
    ShowMessage('Válido')
  else
    ShowMessage('Invalido');
end;

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.

Max Gehringer