[DELPHI] VALIDAR CNPJ


Com o exemplo a seguir podemos facilmente verificar se o texto digitado é um número de CNPJ (Cadastro Nacional da Pessoa Jurídica) 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 CNPJ
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  = CNPJ

PROPERTIES TEDIT1:
Name = edtCNPJ

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 ValidaCNPJ(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 ValidaCNPJ da seguinte forma:

function TFrm_Principal.ValidaCNPJ(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;

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.btnValidarClick(Sender: TObject);
begin
  if ValidaCNPJ(edtCNPJ.Text) then
    Application.MessageBox('CNPJ válido.', 'Aviso', mb_iconinformation + mb_ok)
  else
    Application.MessageBox('CNPJ inválido', 'Aviso', MB_ICONERROR + mb_ok);
end;

Salve as alterações (File -> Save All), coloque o nome uPrincipal para Unit e ValidarCNPJ 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!【ツ】

Download

Nenhum comentário:

Postar um comentário