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.

    • 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