CNPJ alfanumérico: o que muda para desenvolvedores em 2026
O CNPJ deixou de ser uma informação que pode ser tratada como “apenas 14 números”. Desde 31 de julho de 2026, a Receita Federal iniciou a geração do CNPJ alfanumérico para novas inscrições. Sistemas que assumem somente dígitos precisam ser revisados.
O que mudou no CNPJ?
O tamanho continua sendo de 14 posições. A diferença é a composição:
- 1ª a 8ª posições: raiz alfanumérica;
- 9ª a 12ª posições: ordem do estabelecimento também alfanumérica;
- 13ª e 14ª posições: dígitos verificadores, que continuam numéricos.
Nas 12 primeiras posições podem aparecer números de 0 a 9 e letras maiúsculas de A a Z. Os CNPJs numéricos já existentes continuam válidos e os dois formatos precisam coexistir nos sistemas.
00.000.000/E08G-12, em 31/07/2026.Que tipo de código pode quebrar?
O maior risco está em regras antigas que não tratavam o CNPJ como um identificador textual.
1. Remover tudo que não é número
Este padrão, muito comum em PHP, passa a destruir um CNPJ alfanumérico:
$cnpj = preg_replace('/\D/', '', $cnpj);
Se o valor contiver E08G, as letras serão apagadas. Para normalizar o novo formato sem validar o dígito verificador, uma abordagem compatível é:
function normalizarCnpj(string $cnpj): string
{
$cnpj = strtoupper(trim($cnpj));
return preg_replace('/[^A-Z0-9]/', '', $cnpj);
}
Depois da normalização, uma verificação estrutural pode aceitar 12 caracteres alfanuméricos seguidos de dois dígitos:
function formatoCnpjValido(string $cnpj): bool
{
$cnpj = normalizarCnpj($cnpj);
return (bool) preg_match(
'/^[A-Z0-9]{12}[0-9]{2}$/',
$cnpj
);
}
2. CNPJ armazenado como número
Um CNPJ nunca deveria ser tratado como valor matemático. Além de letras agora serem válidas, CNPJs podem começar com zero.
Para armazenar o valor normalizado, prefira um tipo textual de tamanho fixo, por exemplo:
cnpj CHAR(14) NOT NULL
A máscara deve ser aplicada somente na apresentação. Assim o banco guarda algo como:
00000000E08G12
e a interface pode exibir:
00.000.000/E08G-12
3. Models e DTOs usando number
No frontend e nas APIs, o CNPJ deve ser string.
export interface Empresa {
id: number;
cnpj: string;
razaoSocial: string;
}
Evite converter CNPJ com Number(), parseInt() ou equivalentes.
Inputs e máscaras precisam aceitar letras
Campos configurados com teclado exclusivamente numérico, máscaras fixas de dígitos ou expressões como \d{14} precisam ser revistos.
Alguns pontos para conferir:
- remover
inputmode="numeric"quando ele impedir a entrada de letras; - aceitar letras de A a Z nas 12 primeiras posições;
- normalizar letras para maiúsculas;
- manter os dois dígitos finais como numéricos;
- continuar aceitando CNPJs numéricos antigos.
A validação de tela não deve substituir a validação feita no backend.
APIs, JSON e integrações
Revise contratos que descrevem CNPJ como número ou usam pattern exclusivamente numérico. O valor deve trafegar como texto:
{
"cnpj": "00000000E08G12"
}
Em um schema próprio, a estrutura normalizada pode ser representada conceitualmente por:
^[A-Z0-9]{12}[0-9]{2}$
Mas lembre-se: a regra de formato é apenas uma parte. Para validação completa, também é necessário implementar o cálculo oficial do dígito verificador.
Se sua integração serializa/deserializa CNPJ, revise DTOs, validações, documentação OpenAPI, mensageria, arquivos CSV e qualquer rotina que aplique conversão numérica.
O cálculo do dígito verificador também mudou?
O cálculo continua baseado em Módulo 11, porém o formato alfanumérico exige transformar letras e números em valores usados no cálculo. A especificação oficial utiliza valores baseados na tabela ASCII, com a regra técnica definida pela Receita Federal.
Por isso, não é seguro adaptar uma função antiga simplesmente removendo as letras. A validação correta deve seguir o algoritmo oficial.
Vamos publicar um artigo separado com a implementação completa em PHP para manter esta explicação focada na adaptação dos sistemas.
XML, XSD, NF-e e documentos fiscais
Integrações fiscais merecem atenção especial. Não altere schemas oficiais manualmente com uma regex criada por conta própria.
Para NF-e e NFC-e, o Portal Nacional publicou a Nota Técnica 2026.004 e os respectivos schemas para adequação ao CNPJ alfanumérico. Sistemas emissores e consumidores devem usar a versão oficial aplicável ao documento.
Faça a mesma verificação para outros leiautes governamentais, web services e XSDs que contenham CNPJ.
Checklist para revisar um sistema existente
- Pesquisar no banco por colunas CNPJ definidas como tipos numéricos.
- Pesquisar no backend por
intval,parseInt, casts e funções que removem tudo que não é dígito. - Revisar regex do tipo
\d{14}ou[0-9]{14}. - Revisar máscaras e componentes de input.
- Revisar DTOs, models e contratos de API.
- Revisar JSON, CSV, importadores e exportadores.
- Revisar XSDs e integrações fiscais usando as versões oficiais.
- Implementar o cálculo oficial dos dígitos verificadores.
- Criar testes automatizados para CNPJ numérico e alfanumérico.
- Manter compatibilidade com os CNPJs numéricos já existentes.
Casos mínimos de teste
Mesmo antes de implementar a validação completa do DV, sua suíte de testes deve comprovar que o sistema não destrói letras nem rejeita o formato novo prematuramente.
// formato numérico legado
11222333000181
// formato alfanumérico real divulgado pela Receita
00000000E08G12
Além dos casos válidos, teste letras em posições proibidas, tamanho incorreto, caracteres especiais, letras minúsculas antes da normalização e DV não numérico.
Próximas publicações deste assunto
Este artigo abre um pequeno conjunto de conteúdos sobre a migração. Os próximos serão:
- Como validar CNPJ numérico e alfanumérico em PHP — incluindo o cálculo oficial do DV;
- Regex para CNPJ alfanumérico — formato versus dígito verificador;
- Como adaptar banco de dados, inputs e APIs para CNPJ alfanumérico — checklist técnico mais detalhado.
Fontes oficiais
- Receita Federal — CNPJ Alfanumérico
- Receita Federal — Perguntas e Respostas do novo CNPJ
- Receita Federal — cálculo do DV do CNPJ alfanumérico
- Receita Federal — primeiro CNPJ alfanumérico gerado
- Portal NF-e — Notas Técnicas vigentes
Referências conferidas em 09/09/2026.