Tiago Porto

Novo CNPJ: Seu código está preparado para a mudança?


Tiago Porto

Logo novo CNPJ alfanumérico
Logo CNPJ alfanumérico

Em vista à demanda por novos CNPJs e a possibilidade do esgotamento dos números disponíveis, em 15 de outubro de 2024 a Receita Federal Brasileira publicou uma instrução normativa (Instrução Normativa RFB nº 2.229) alterando o formato do CNPJ. O novo formato agora incluirá letras e números.

N - NúmeroS - Letra ou NúmeroSS.SSS.SSS/SSSS - NNRaiz/Ordem-DVCNPJ Alfanumérico

O novo número continuará a ter 14 posições. As doze primeiras compostas por letras e números e as duas últimas posições correspondentes aos dígitos verificadores continuarão a ser numéricas.

Compatibilidade

O novo formato é compatível com o anterior e todos os CNPJs numéricos existentes permanecerão válidos.

Quando entra em vigor?

Pela atual Instrução Normativa a previsão é julho de 2026, se não houver adiamentos.

Algoritmo

Cálculo dos dígitos verificadores

Os dígitos verificadores (DV) são calculados em duas etapas usando os primeiros doze caracteres.

Cálculo do primeiro dígito verificador

Para cada um dos caracteres do CNPJ, atribuir o valor da coluna Valor para cálculo do DV, conforme a tabela abaixo (ou subtrair 48 do Valor ASCII):

CNPJ
Alfanumérico
Valor ASCIIValor para
cálculo do DV
0480
1491
2502
3513
4524
5535
6546
7557
8568
9579
A6517
B6618
C6719
D6820
E6921
F7022
G7123
H7224
I7325
J7426
K7527
L7628
M7729
N7830
O7931
P8032
Q8133
R8234
S8335
T8436
U8537
V8638
W8739
X8840
Y8941
Z9042

Exemplo:

CNPJ12ABC34501DE
Valor12171819345012021

Distribuir os pesos de 2 a 9 da direita para a esquerda (recomeçando depois do oitavo caracter), conforme o exemplo:

CNPJ12ABC34501DE
Valor12171819345012021
Peso543298765432

Multiplicar valor e peso de cada coluna e somar todos os resultados:

CNPJ12ABC34501DE
Valor12171819345012021
Peso543298765432
Multiplicação585136171242830046042

Somatório (5+8+…+42) = 459

Obter o resto da divisão do somatório por 11. Se o resto da divisão for igual a 1 ou 0, o primeiro dígito será igual a 0 (zero). Senão, o primeiro dígito será igual ao resultado de 11 menos o resto.

Exemplo:

Resto da divisão 459/11 = 8

1º DV = 3 (resultado de 11-8)

Cálculo do segundo dígito verificador

Para o cálculo do segundo dígito é necessário acrescentar o primeiro DV ao final do CNPJ, formando assim treze caracteres, e repetir os passos realizados para o primeiro dígito.

Exemplo:

CNPJ12ABC34501DE3
Atribuição de Valor121718193450120213
Atribuição de Peso6543298765432
Multiplicação6106854382732350580636

Somatório (6+10+…+6) = 424

Resto da divisão 424/11 = 6

2º DV = 5 (resultado de 11-6)

Resultado final: 12.ABC.345/01DE-35

Ajustes técnicos

Banco de dados

Os campos de CNPJ precisam ser ajustados para alfanuméricos caso sejam numéricos.

Interface

Máscara de validação

Como mencionado, a máscara do novo CNPJ foi modificada, será necessário atualizar a máscara de validação dos <input>.

O novo pattern:

[A-Z0-9]{2}.[A-Z0-9]{3}.[A-Z0-9]{3}/[A-Z0-9]{4}-[0-9]{2}

Algoritmo de validação

O algoritmo de validação precisa ser atualizado para validar um CNPJ alfanumérico.

Para facilitar, disponibilizei uma lib em TypeScript com o novo algoritmo (gerador-validador-cnpj).

Basta instalar com NPM:

npm install gerador-validador-cnpj -D

E usar:

import { validate as validadeCNPJ } from 'gerador-validador-cnpj'

const isCNPJValid = validadeCNPJ('01234567890000')
const isCNPJAlphanumericValid = validadeCNPJ('9ZW2JIM2OWTG85', {
  validateAlphanumeric: true
})
const isFormattedCNPJValid = validadeCNPJ('01.234.567/8900-00')
const isFormattedCNPJAlphanumericValid = validadeCNPJ('8I.S4O.LPO/PRD7-81', {
  validateAlphanumeric: true
})

Se estiver usando Deno, não precisa instalar, só importar direto:

import { validate } from 'jsr:@tiagoporto/gerador-validador-cnpj'

Documentação completa no NPM ou JSR.

Referências

Comentários e reações