Analitcs

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

segunda-feira, 1 de outubro de 2012

DELPHI - Validação CNPJ

Reações: 
// Adequada a função de CPF

Function ValidacaoCNPJ(CNPJ: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    := CNPJ[1];//variavel para testar se o CNPJ é repetido como 111.111.111-11
  CNPJ := StrNumber(CNPJ); // Limpa o que não for numero
  if Length(CNPJ) < 14 then
  begin
    Result := False;
    exit;
  end;
  //testar se o CNPJ é repetido como 111.111.111-11
  for I := 1 to length(CNPJ) do
  begin
    if CNPJ[i] <> Want then
    begin
      Wvalid := True;  // se o CNPJ possui um digito diferente ele passou no primeiro teste
      Break;
    end;
  end;
  // se o CNPJ é 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 12 do
  begin
    if I+1 <= 9 then
      Wdigit1 := Wdigit1 + (StrToInt(CNPJ[13-i])*(I+1))
    else
    if I+1 > 9 then
      Wdigit1 := Wdigit1 + (StrToInt(CNPJ[13-i])*(I-7));
  end;
  Wdigit1:= 11 - (Wdigit1 mod 11);
  if Wdigit1 >= 10 then Wdigit1 := 0;
  //verifica se o 1° digito confere
  if IntToStr(Wdigit1) <> CNPJ[13] then
  begin
    Result := false;
    Exit;
  end;
  Wdigit2 := Wdigit1 * 2;
  for i := 1 to 12 do
  begin
    if I <= 7 then
      Wdigit2 := Wdigit2 + (StrToInt(CNPJ[13-i])*(I+2))
    else
    if I > 7 then
      Wdigit2 := Wdigit2 + (StrToInt(CNPJ[13-i])*(I-6));
  end;
  Wdigit2 := 11 - (Wdigit2 mod 11);
  if Wdigit2 >= 10 then Wdigit2 := 0;
  // confere o 2° digito verificador
  if IntToStr(Wdigit2) <> CNPJ[14] then
  begin
    Result := False;
    Exit;
  end;
  //se chegar até aqui o CNPJ é valido
  Result := True;
end;


// Usando:
  if ValidacaoCNPJ(Edit1.Text) then
    ShowMessage('Válido')
  else
    ShowMessage('Invalido');

Nenhum comentário:

Postar um comentário

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

Max Gehringer