CNPJ – Validação no Delphi

 Um dos nossos artigos mais lidos é o Algoritmo de CNPJ, muitos visitantes gostam e aplicam os ensinamentos em seus programas, mas muitos tem dúvidas de como aplicar o algoritmo na sua linguagem de trabalho.

Alguns pedidos chegaram para nossa equipe, como o do amigo Hermes Ferreira que postou a sugestão no artigo do algoritmo: “Achei a forma muito prática para validação dos dígitos verificadores, no entanto gostaria que esta forma fosse explicada utilizando os argumentos da lógica de programação, tanto em VBA como em Delphi”.

Bom, em Delphi estamos colocando o código comentado e um pequeno software que mostra o funcionamento, fica aqui o pedido para algum dos nossos colaboradores ou visitantes fazer o mesmo em VBA. Vale o registro que em breve vou publicar o mesmo artigo para PHP.

Vamos lá.

/////////////////////////////////////////////////////////////////////////////

//Função de validação da CNPJ

//Baseado no artigo Algoritmo CNPJ do Clube da Informática

//http://www.clubedainformatica.com.br/mostraartigo.php?artigo=63

/////////////////////////////////////////////////////////////////////////////

function ValidaCNPJ(I:string): Boolean;

var

cnpj: array[1..15] of integer;

apoio: array[0..15] of integer;

f: integer;//para uso no for

total: integer;//para totalização dos valores

D1: integer;//primeiro dígito calculado

D2: integer;//segundo dígito calculado

begin

//Primeiro teste: o número de algarismos

if (Length(I)<>14) then result:=false

else

  begin

  //Antes do teste propriamente dito temos que montar a matriz com os

  //os algarismos do CNPJ e depois uma matriz apoio) que terá os números

  //que ajudarão a verificar so dígitos verificadores

  //

  //Monta matriz cnpj

  for f := 1 to 14 do

      begin

       cnpj[f]:=strtoint(I[f]);

      end;

  end;

  //Monta matriz de apoio

  apoio[0]:=6;//só será usada no cálculo do segundo dígito verificador

  apoio[1]:=5;

  apoio[2]:=4;

  apoio[3]:=3;

  apoio[4]:=2;

  apoio[5]:=9;

  apoio[6]:=8;

  apoio[7]:=7;

  apoio[8]:=6;

  apoio[9]:=5;

  apoio[10]:=4;

  apoio[11]:=3;

  apoio[12]:=2;

  //Começa cálculo do primeiro dígito verificador

  total:=0;//variável que conterá a soma da operação com os números

  for f := 1 to 12 do

        begin

          total:=total+(cnpj[f]*apoio[f]);

        end;

  D1 := total mod 11;

      if (D1<2) then D1:=0 else D1:=11-D1;

      if (D1<>cnpj[13]) then

        begin

          //Primeiro dígito verificador não confere

          Result:=false;

        end else

                begin

                 //Entrou aqui, então o primeiro dígito confere!

                 total:=0;

                 for f := 0 to 12 do

                        begin

                           total:=total+(cnpj[f+1]*apoio[f]);

                        end;

                 D2 :=total mod 11;

                 if (D2<2) then D2:=0 else D2:=11-D2;

                 if (D2<>cnpj[14]) then

                        begin

                           //Segunod digito verificador não confere

                           Result:=false;

                        end else Result:=true;

                 end;

 

end;

 

É lógico que existe outras formas de aplicar o algoritmo, essa eu achei fácil de demonstrar e fica disponível no software, já que é uma função, para ser usada a qualquer momento, é só chamar a função quando necessário.

um abraço!

Clique e faça o download do executável e os fontes

Plínio Cruz

Diretor do Clube da Informática

Compatilhe esse artigo!

6 thoughts on “CNPJ – Validação no Delphi

Leave a Reply

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.