O CNPJ (Cadastro Nacional da Pessoa Jurídica) é um número único composto por quatorze algarismos que identifica uma pessoa jurídica junto à Receita Federal brasileira (órgão do Ministério da Fazenda), necessário para que a pessoa jurídica tenha capacidade de fazer contratos e processar ou ser processada.
O CNPJ é validado da mesma forma que o CPF, tendo a única diferença nos vetores padrões. São os dois últimos dígitos que validam todos os 12 algarismos anteriores.
Para o algoritmo abaixo usaremos como exemplo o seguinte CNPJ: 44.038.188/0001-32.
Algoritmo para Geração de CNPJ:
- Cálculo do primeiro dígito verificador:
Tomamos um vetor [latex] a E R^12 [/latex] cujos componentes são os 12 primeiros dígitos que compõem o número do CNPJ. Para o CNPJ que será utilizado neste exemplo (44.038.188/0001-32) teremos o seguinte vetor:
[latex] a = (4, 4, 0, 3, 8, 1, 8, 8, 0, 0, 0, 1) [/latex]
Determinamos o produto escalar desse vetor com o vetor padrão:
[latex] b = (5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2) [/latex]
OBS: O vetor padrão, como o próprio nome diz, será sempre o mesmo quando for calculado o digito verificador.
[latex] a.b = a = (4, 4, 0, 3, 8, 1, 8, 8, 0, 0, 0, 1) . b = (5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2) = 20 + 16 + 0 + 6 + 72 + 8 + 56 + 48 + 0 + 0 + 0 + 2 = 228 [/latex]
Agora tomamos o resto da divisão do produto escalar por 11, ou seja, 228 dividido por 11 teremos resto inteiro igual à 8. O primeiro dígito verificador é dado pela subtração [latex] 11 – resto[/latex] e teremos como resultado o número 3.
- Cálculo do segundo dígito verificador:
Tomamos um vetor [latex] c E R^13 [/latex] cujos componentes são os 12 primeiros dígitos que compõem o número do CNPJ mais o primeiro dígito verificador 3, calculado anteriormente:
[latex] c = (4, 4, 0, 3, 8, 1, 8, 8, 0, 0, 0, 1, 3) [/latex]
Determinamos o produto escalar desse vetor com o vetor padrão:
[latex] d = (6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2) [/latex]
OBS: No segundo vetor padrão deve-se adicionar o número 6 no primeiro componente do vetor.
[latex] c.d = (4, 4, 0, 3, 8, 1, 8, 8, 0, 0, 0, 1, 3) . (6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2) = 24 + 20 + 0 + 9 + 16 + 9 + 64 + 56 + 0 + 0 + 0 + 3 + 6 = 207 [/latex]
Agora tomamos o resto da divisão do produto escalar por 11, ou seja, 207 dividido por 11 teremos resto inteiro igual à 9. O segundo dígito verificador é dado pela subtração [latex] 11 – resto[/latex] e teremos como resultado o número 2.
Completando nosso CNPJ 44.038.188/0001-xx com os dois dígitos verificadores calculados teremos 44.038.188/0001-32.
Bem legal o algoritmo! Só faltou um pequeno detalhe: quando qualquer um dos dois dígitos verificadores calculados pela subtração 11 – resto for maior que 9, ele se torna 0 (zero).