Visitantes que leram esse artigo, também visitaram:
  • Algoritmo de CNPJ
  • Adriano Santos
  • Instalando o QuickReport no Delphi 7
  • Validação do CPF em PHP
  • Anderson Haertel Rodrigues


  • CNPJ – Validação no Delphi

    Postado por Plinio Cruz em 17 de janeiro de 2008 na categoria Delphi, Programação | 5 Comments to Read

    1 Estrela2 Estrela3 Estrela4 Estrela5 Estrela (3 votos, média: 5,00)
    Loading ... Loading ...

     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

    • Adilson Rumão said,

      Esta função está com erro, pois dá inválido no meu CPF.
      E tbm em outros que testei mesmo sendo válidos.

    • Plinio Cruz said,

      Caro Adilson, você utilizou a rotina dessa artigo? Repare que aqui o exemplo é de CNPJ. A validação em CPF é http://www.clubedainformatica.com.br/site/2003/10/22/algoritmo-de-cpf/, qualquer dúvida envie seu código para contato@clubedainformatica.com.br que podemos ajudar.

    • Netto Passaro said,

      Muito boa a função.

      Só pra agregar… se colocar tudo zero (00000000000000)
      ele deixa passar…

      pra resolver agreguei isso no começo da função:

      if (I=’00000000000000′) then result:=false
      else

      dai começa a funcao original:
      if (Length(I)14) then result:=false

      etc etc

      abraços!!!

    • shyko said,

      SHOW! PARA MIM ESTA OTIMO, MAIS VALE CONMPLETAR A DICA DO NETTO

    • Myrella said,

      Parabéns, código bem comentado e explicado, funcionou de primeira.

    Deixe seu comentário