valida-cnpj-alfanumerico
v1.0.0
Published
Validação, formatação e geração de CNPJ alfanumérico (e numérico) conforme a IN RFB nº 2.229/2024 — algoritmo oficial da Receita Federal, zero dependências, funciona em Node.js e navegador.
Maintainers
Readme
valida-cnpj-alfanumerico
Validação, formatação e geração de CNPJ alfanumérico (e numérico) em JavaScript, conforme a IN RFB nº 2.229/2024.
- ✅ Algoritmo oficial da Receita Federal (valor do caractere = ASCII − 48, módulo 11)
- ✅ Valida os dois formatos: numérico tradicional e o novo alfanumérico (desde 31/07/2026)
- ✅ Zero dependências, um único arquivo, funciona em Node.js e navegador (UMD)
- ✅ Testado contra o exemplo oficial da Receita (
12.ABC.345/01DE-35) e massa de 10.000 CNPJs gerados
🔧 Prefere usar direto no navegador? Ferramentas online gratuitas (validador, validação em lote com CSV e gerador de massa de teste) em cnpjcomletras.com.br.
Instalação
npm install valida-cnpj-alfanumericoOu copie o arquivo cnpj.js direto para o seu projeto — é autocontido.
Uso
Node.js
const CNPJ = require("valida-cnpj-alfanumerico");
CNPJ.isValid("12.ABC.345/01DE-35"); // true (exemplo oficial da Receita)
CNPJ.isValid("00.000.000/0001-91"); // true (numérico continua válido)
CNPJ.isValid("12.ABC.345/01DE-00"); // false (DV não confere)
CNPJ.validate("12ABC34501DE35");
// { valid: true, reason: null, stripped: "12ABC34501DE35",
// formatted: "12.ABC.345/01DE-35", isAlphanumeric: true, expectedDigits: "35" }
CNPJ.checkDigits("12ABC34501DE"); // "35" — calcula os 2 DVs para uma base de 12
CNPJ.format("12abc34501de35"); // "12.ABC.345/01DE-35"
CNPJ.strip("12.ABC.345/01DE-35"); // "12ABC34501DE35"
CNPJ.generate({ alphanumeric: true }); // "RB0EHTXM000100" (teste válido)
CNPJ.generate({ alphanumeric: true, masked: true }); // "HV.J3Y.NE2/0001-73"
CNPJ.explain("12ABC34501DE35"); // { base, dv1, dv2, digits } — passo a passo do cálculoNavegador
<script src="cnpj.js"></script>
<script>
CNPJ.isValid("12.ABC.345/01DE-35"); // true — exposto como global CNPJ
</script>O que muda com o CNPJ alfanumérico?
Desde 31 de julho de 2026, novas inscrições podem receber CNPJ contendo letras:
| Posições | Conteúdo | Aceita |
|---|---|---|
| 1–8 (raiz) | identificação da empresa | 0-9 e A-Z |
| 9–12 (ordem) | estabelecimento | 0-9 e A-Z |
| 13–14 (DV) | dígitos verificadores | somente 0-9 |
CNPJs já emitidos não mudam. O cálculo do DV usa o mesmo módulo 11 de sempre, mas cada caractere entra com o valor ASCII − 48 ('0'→0 … '9'→9, 'A'→17 … 'Z'→42).
Sistemas que guardam CNPJ como número (BIGINT, parseInt), validam com ^\d{14}$ ou usam máscara só-dígitos rejeitam ou corrompem os novos CNPJs. Guia completo de adaptação: como adaptar seu sistema · funções em Python, Java, C# e SQL.
API
| Função | Descrição |
|---|---|
| isValid(valor) | true/false — aceita com ou sem máscara, maiúsculas ou minúsculas |
| validate(valor) | objeto com valid, reason (se inválido), stripped, formatted, isAlphanumeric, expectedDigits |
| checkDigits(base12) | calcula os 2 dígitos verificadores de uma base de 12 caracteres |
| format(valor) | aplica a máscara XX.XXX.XXX/XXXX-XX |
| strip(valor) | remove máscara e normaliza para maiúsculas |
| generate(opcoes) | gera CNPJ de teste válido ({ alphanumeric, masked }) |
| explain(valor) | passo a passo do cálculo do DV (para depuração/didática) |
⚠️ A validação é estrutural (formato + dígitos verificadores). Ela não consulta a base da Receita Federal — um CNPJ estruturalmente válido pode não existir.
Testes
npm test17 casos incluindo o exemplo oficial da Receita, CNPJs numéricos reais, DVs inválidos e 10.000 CNPJs gerados aleatoriamente.
Ferramentas relacionadas
- 🔍 Validador online + gerador de massa de teste — grátis, roda no navegador
- 🩺 cnpj-scan — varredura do seu código-fonte atrás de padrões que quebram com o CNPJ alfanumérico (colunas numéricas, regex só-dígitos, conversões)
