Visitantes que leram esse artigo, também visitaram:
  • CNPJ – Valida√ß√£o no Delphi
  • Site do Fund√£o: Algoritmo Insertion Sort
  • Algoritmo do PIS – Programas de Integra√ß√£o Social
  • Poderoso Algoritmo de Ordena√ß√£o do Fund√£o da Computa√ß√£o
  • Algoritmo para Busca Bin√°ria


  • Algoritmo de CNPJ

    Postado por Plinio Cruz em 7 de novembro de 2003 na categoria Programa√ß√£o, Solu√ß√Ķes | 7 Comments to Read

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

    Uma rotina muito utilizada por programadores em softwares comerciais é a da validação do Cadastro Nacional de Pessoa Jurídica (CNPJ). Muitos pegam essas rotinas prontas na internet, milhares de sites oferecem nas mais diversas linguagens de programação. Aos invés de você confiar seu software a essas rotinas que tal você mesmo desenvolver a sua tendo a certeza que a mesma está certa e funciona perfeitamente?

    Para isso fomos atr√°s do algoritmo respons√°vel pela valida√ß√£o de acordo com a regras do Minist√©rio da Fazenda para voc√™ mesmo fazer seu algoritmo e ter certeza de que o mesmo funcionar√° corretamente al√©m ter o controle do mesmo para eventuais modifica√ß√Ķes.

     

    Entendendo o CNPJ

     

    O n√ļmero que comp√Ķe o CNPJ √© composto por tr√™s segmentos de algarismos, sendo o primeiro o n√ļmero da inscri√ß√£o propriamente dito, o segundo (ap√≥s a barra) o n√ļmero de filiais e o terceiro representados pelos √ļltimos dois valores que s√£o os d√≠gitos verificadores.

    Oficialmente o c√°lculo do n√ļmero do CNPJ prev√™ tamb√©m a verifica√ß√£o do oitavo d√≠gito, mas algumas empresas possuem n√ļmeros que ao serem validados segundo esse crit√©rio s√£o considerados inv√°lidos.

    Por isso o mais seguro √© voc√™ fazer a valida√ß√£o dos d√≠gitos verificadores, pois assim nenhum n√ļmero ser√° inv√°lido e sua rotina est√° protegida da mesma forma, j√° que a regra √© √ļnica e funciona com qualquer CNPJ v√°lido.

     

    Validando os dígitos verificadores

     

    Vamos mostrar o modo de c√°lculo de modo pr√°tico, para isso vamos adotar um n√ļmero de CNPJ hipot√©tico e calcularemos seus d√≠gitos verificadores: 11.222.333/0001-XX.

    Vamos come√ßar alinhando os n√ļmeros que comp√Ķe o CNPJ com os algarismos 5,4,3,2,9,8,7,6,5,4,3 e 2 nesta ordem, veja:

    1 1 2 2 2 3 3 3 0 0 0 1
    5 4 3 2 9 8 7 6 5 4 3 2

    Feito isso efetuaremos a multiplicação de cada uma das colunas, assim:

    1 1 2 2 2 3 3 3 0 0 0 1
    5 4 3 2 9 8 7 6 5 4 3 2
    5 4 6 4 18 24 21 18 0 0 0 2

    Com os valores encontrados em cada uma das colunas efetuaremos o somat√≥rio, desta forma: 5+4+6+4+18+24+21+18+0+0+0+2 e com o n√ļmero obtido, nesse caso 102, realizaremos a divis√£o por 11 (102/11).

    Vamos considerar como quociente somente o valor inteiro, o resto da divis√£o ser√° respons√°vel pelo c√°lculo do primeiro d√≠gito verificador. Assim sendo, no nosso caso o resto da divis√£o √© o n√ļmero 3.

    Neste momento temos a seguinte regra: Caso o resto da divis√£o seja menor que 2 o valor do d√≠gito verificador passa a ser 0, caso contr√°rio subtra√≠mos o valor de 11 para obter o d√≠gito, que √© o nosso caso, portanto nosso primeiro d√≠gito verificador √© (11 – 3) o n√ļmero 8.

    Para seguirmos com a nossa valida√ß√£o tomaremos o CNPJ com o primeiro d√≠gito j√° calculado para efetuarmos a valida√ß√£o do segundo e √ļltimo d√≠gito verificador: 11.222.333/0001-8X.

    O processo √© semelhante a primeira etapa, a √ļnica mudan√ßa √© a seq√ľ√™ncia de n√ļmeros que ser√£o alinhados na tabela, como a tabela ficou maior com a presen√ßa do d√≠gito j√° calculado a seq√ľ√™ncia agora tem que ter mais um n√ļmero e ficar√° assim: 6,5,4,3,2,9,8,7,6,5,4,3 e 2, confira:

    1 1 2 2 2 3 3 3 0 0 0 1 8
    6 5 4 3 2 9 8 7 6 5 4 3 2
    6 5 8 6 4 27 24 21 0 0 0 3 16

    Como você pode notar efetuamos também, como na primeira etapa, a multiplicação das colunas e faremos agora o somatório das resultados obtidos: 6+5+8+6+4+27+24+21+0+0+0+3+16. Com o resultado obtido, nesse caso 120, efetuamos a divisão por 11.

    Nessa divis√£o, assim como no c√°lculo anterior, vamos apenas considerar o valor inteiro do quociente, pois o c√°lculo do √ļltimo d√≠gito verificador ser√° feito com o resto da divis√£o seguindo a seguinte regra: caso o resto da divis√£o seja menor que 2 (dois), esse valor passa automaticamente a ser zero; caso contr√°rio, que √© o nosso caso, subtrai-se o resto de 11 para obter o valor do √ļltimo d√≠gito verificador, acompanhe: 120/11=10 com resto 10, 11-10 d√≠gito verificador 1 – Nosso CNPJ agora completo 11.222.333/0001-81.

    Cursos Online na Ńrea de InformŠtica

    • Danilo Fidelis said,

      Pessoal isso o que vcs montaram acima é uma função não é?
      Como eu sou Iniciante n√£o consigo fazer ainda essas programa√ß√Ķes mais apuradas se poss√≠vel mande-a pra mim montada e comentada. Ficarei muito grato por isso.
      Abraços.

    • Plinio Cruz said,

      Danilo, na verdade o artigo acima √© um algoritmo para voc√™ desenvolver a valida√ß√£o em qualquer linguagem de programa√ß√£o, mesmo sendo iniciante voc√™ conseguir√°, pois o modo de valida√ß√£o n√£o necessita de comandos complexos, s√£o a√ß√Ķes simples com opera√ß√Ķes matem√°ticas e compara√ß√Ķes. Em Delphi (pascal) voc√™ tem como pegar aqui mesmo no site, veja os artigos relacionados acima. abra√ßo!

    • Algoritmo do PIS - Programas de Integra√ß√£o Social » Clube da Inform√°tica said,

      [...] que procuram em nossos artigos o algoritmo do CPF (Cadastro de Pessoa Física) e do CNPJ (Cadastro Nacional da Pessoal Física), sendo assim procuramos e pesquisamos mais algoritmos que possam ajudar nossos amigos [...]

    • Sullivan Wilian said,

      Cara, você poderia ter dito que tirou este texto do livro de Pascal do Manzano.

    • Plinio Cruz said,

      Caro Sullivan, tanto o Manzano quanto eu bebemos na mesma fonte, esse exemplo e o texto é fornecido pelo centro de TI do Fazenda, eles fornecem as regras, assim com tem também no exemplo do CPF. Eu tivesse acesso, assim como acredito que o Manzano também, mas com certeza não tira o mérito, o livro do Manzano é um guia que não pode faltar em nenhuma biblioteca. braço Plínio Cruz

    • Jaqueline said,

      Alguém sabe onde encontro as regras oficiais para a geração de dígitos verificadores para documentos como PIS, CEI, CNPJ e CPF?

      Os algoritmos eu já tenho. Escrevi um programa para verificar dígitos verificadores de alguns tipos de documentos oficiais (será divulgado em breve como comando de Stata, disponível a todos). Para isso me baseei em referências secundárias na internet como Wikipedia, forums de programadores, etc.

      No entanto tanto para a confer√™ncia final e documenta√ß√£o do comando, como para a inclus√£o em algumas pesquisas preciso das fontes oficiais. Algu√©m tem id√©ia onde posso encontrar publica√ß√Ķes oficiais que descrevam estes algoritmos?

    • Plinio Cruz said,

      Jaqueline os algoritmos de PIS, CNPJ e CPF do Clube da Inform√°tica forma feitos em consulta a documentos oficiais da fazenda, s√£o utilizando por nosso equipe da Trio Interativa em nossos sistema com muito sucesso. CEI seria o que? N√£o sei ao que se refere, se for alguma forma de identidade lamento dizer que essas verifica√ß√Ķes mudam de √≥rg√£o para √≥rg√£o, diferente dos outros tr√™s. Qualquer d√ļvida √© s√≥ falar. abs Pl√≠nio Cruz

    Deixe seu comentário