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

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.
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 ASCII | Valor para cálculo do DV |
---|---|---|
0 | 48 | 0 |
1 | 49 | 1 |
2 | 50 | 2 |
3 | 51 | 3 |
4 | 52 | 4 |
5 | 53 | 5 |
6 | 54 | 6 |
7 | 55 | 7 |
8 | 56 | 8 |
9 | 57 | 9 |
A | 65 | 17 |
B | 66 | 18 |
C | 67 | 19 |
D | 68 | 20 |
E | 69 | 21 |
F | 70 | 22 |
G | 71 | 23 |
H | 72 | 24 |
I | 73 | 25 |
J | 74 | 26 |
K | 75 | 27 |
L | 76 | 28 |
M | 77 | 29 |
N | 78 | 30 |
O | 79 | 31 |
P | 80 | 32 |
Q | 81 | 33 |
R | 82 | 34 |
S | 83 | 35 |
T | 84 | 36 |
U | 85 | 37 |
V | 86 | 38 |
W | 87 | 39 |
X | 88 | 40 |
Y | 89 | 41 |
Z | 90 | 42 |
Exemplo:
CNPJ | 1 | 2 | A | B | C | 3 | 4 | 5 | 0 | 1 | D | E |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Valor | 1 | 2 | 17 | 18 | 19 | 3 | 4 | 5 | 0 | 1 | 20 | 21 |
Distribuir os pesos de 2 a 9 da direita para a esquerda (recomeçando depois do oitavo caracter), conforme o exemplo:
CNPJ | 1 | 2 | A | B | C | 3 | 4 | 5 | 0 | 1 | D | E |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Valor | 1 | 2 | 17 | 18 | 19 | 3 | 4 | 5 | 0 | 1 | 20 | 21 |
Peso | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
Multiplicar valor e peso de cada coluna e somar todos os resultados:
CNPJ | 1 | 2 | A | B | C | 3 | 4 | 5 | 0 | 1 | D | E |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Valor | 1 | 2 | 17 | 18 | 19 | 3 | 4 | 5 | 0 | 1 | 20 | 21 |
Peso | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
Multiplicação | 5 | 8 | 51 | 36 | 171 | 24 | 28 | 30 | 0 | 4 | 60 | 42 |
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:
CNPJ | 1 | 2 | A | B | C | 3 | 4 | 5 | 0 | 1 | D | E | 3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Atribuição de Valor | 1 | 2 | 17 | 18 | 19 | 3 | 4 | 5 | 0 | 1 | 20 | 21 | 3 |
Atribuição de Peso | 6 | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
Multiplicação | 6 | 10 | 68 | 54 | 38 | 27 | 32 | 35 | 0 | 5 | 80 | 63 | 6 |
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
- CNPJ Alfanumérico
- Instrução Normativa RFB nº 2.229
- Cálculo dos dígitos verificadores de CNPJ alfanumérico