O que este validador confere
Muita gente chama de "validar CNPJ" só a conferência do dígito verificador. Uma validação completa tem quatro camadas, e a ferramenta acima aplica todas elas:
| # | Checagem | Reprova, por exemplo |
|---|---|---|
| 1 | Caracteres permitidos: apenas 0-9 e A-Z (sem acento, cedilha ou símbolo) | 12.ABÇ.345/01DE-35 |
| 2 | Tamanho de exatamente 14 posições depois de remover a máscara | 12ABC34501DE3 |
| 3 | As duas últimas posições precisam ser numéricas | 12ABC34501DEAB |
| 4 | Dígitos verificadores conferem com o módulo 11 recalculado | 12.ABC.345/01DE-34 |
Como validar CNPJ alfanumérico no seu sistema
A implementação de referência, em qualquer linguagem, segue sempre estes passos:
- Normalizar:
toUpperCase()e remover tudo que não for[0-9A-Z]. - Checar o formato com a regex
^[0-9A-Z]{12}\d{2}$. - Calcular o 1º DV sobre os 12 primeiros caracteres.
- Calcular o 2º DV sobre os 12 caracteres mais o 1º DV.
- Comparar os dois dígitos calculados com as posições 13 e 14.
function validarCnpj(entrada) {
const cnpj = String(entrada ?? '').toUpperCase().replace(/[^0-9A-Z]/g, '');
if (!/^[0-9A-Z]{12}\d{2}$/.test(cnpj)) return false; // formato
if (/^(.)\1{13}$/.test(cnpj)) return false; // sequência repetida
const digito = (seq) => {
let soma = 0;
for (let i = 0; i < seq.length; i += 1) {
soma += (seq.charCodeAt(i) - 48) * (((seq.length - 1 - i) % 8) + 2);
}
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
};
const base = cnpj.slice(0, 12);
const d1 = digito(base);
const d2 = digito(`${base}${d1}`);
return `${d1}${d2}` === cnpj.slice(12);
}
validarCnpj('12.ABC.345/01DE-35'); // true
validarCnpj('11.222.333/0001-81'); // true — numérico continua valendo
A mesma função em Python, PHP, Java, C#, Go, Delphi e mais.
Checklist de migração
Se o seu sistema já existia antes de julho de 2026, vale percorrer esta lista antes de receber o primeiro CNPJ com letra:
- Coluna do banco migrada para texto — como fazer sem perder o zero à esquerda.
- Nenhuma conversão para inteiro no caminho do dado (busque por
parseInt,intval,StrToInt,CAST(... AS BIGINT)). - Regex e máscaras atualizadas no front-end, no back-end e nos relatórios.
- Integrações e arquivos de layout fixo (CNAB, SPED, EDI) revisados — muitos definem o campo como numérico.
- Massa de teste com CNPJ alfanumérico real nos ambientes de homologação — use o gerador.
| CNPJ | Resultado | Por quê |
|---|---|---|
12.ABC.345/01DE-35 | Válido | Exemplo oficial da Receita Federal, com letras na raiz e na ordem. |
11.222.333/0001-81 | Válido | CNPJ puramente numérico — continua válido, nada muda. |
A1.B2C.3D4/0001-93 | Válido | Raiz alfanumérica com ordem 0001 (matriz). |
12.ABC.345/01DE-34 | Inválido | Dígito verificador errado — o correto para essa base é 35. |
12.ABC.345/01DE-AB | Inválido | Os dois dígitos verificadores continuam sendo numéricos. |
12.ABÇ.345/01DE-35 | Inválido | Só entram letras de A a Z sem acento — nada de Ç, Ã ou hífen no meio. |
00.000.000/0000-00 | Inválido | Passa no módulo 11, mas não corresponde a nenhuma inscrição real. |
12.ABC.345/01DE-3 | Inválido | Tem 13 caracteres; o CNPJ sempre tem 14. |