Atualizado em 12/06/2026
CNPJ Alfanumérico 2026: O Que Muda e Como Adaptar Sistemas, Bancos de Dados e APIs
A partir de julho de 2026, a Receita Federal começará a atribuir CNPJs alfanuméricos para novas inscrições. O formato continua com 14 posições, mas passa a aceitar letras e números nas 12 primeiras posições. Para empresas de software, ERPs, contabilidades, SaaS, e-commerces e times de tecnologia, isso exige revisão de validações, bancos de dados, APIs, integrações e testes.
Resposta direta: o que muda no CNPJ em 2026?
O CNPJ continuará tendo 14 posições. A diferença é que as 12 primeiras posições poderão conter letras maiúsculas de A a Z e números de 0 a 9. As duas últimas posições continuarão sendo dígitos verificadores numéricos.
A mudança vale para novas inscrições a partir de julho de 2026. Os CNPJs numéricos já existentes continuarão válidos, sem necessidade de recadastramento ou alteração do número atual.
Para sistemas, a regra prática é: pare de tratar CNPJ como número. CNPJ deve ser tratado como identificador textual, normalizado, com validação de formato e cálculo correto do dígito verificador.
O que é CNPJ?
CNPJ é a sigla para Cadastro Nacional da Pessoa Jurídica. Ele funciona como o principal identificador fiscal de empresas, organizações e outras entidades cadastradas na Receita Federal.
Na prática, o CNPJ é usado em cadastros empresariais, emissão de notas fiscais, contratos, bancos, ERPs, CRMs, marketplaces, sistemas contábeis, sistemas fiscais, plataformas SaaS e integrações entre empresas.
Por que isso importa para tecnologia?
Muitos sistemas antigos armazenam CNPJ como número, usam máscaras fixas, validam apenas dígitos ou limitam campos a caracteres numéricos. Com o CNPJ alfanumérico, essas decisões passam a ser pontos de falha.
Por que o CNPJ vai se tornar alfanumérico?
O uso de letras e números aumenta a capacidade de geração de novos identificadores.
Mesmo tamanho
O CNPJ continua com 14 posições, reduzindo impacto em telas, documentos e integrações.
Transição gradualOs CNPJs antigos continuam válidos e os novos passam a ser alfanuméricos apenas para novas inscrições.
Como será o formato do CNPJ alfanumérico?
| Parte do CNPJ | Posições | Formato atual | Novo formato | Função |
|---|---|---|---|---|
| Raiz | 1 a 8 | Somente números | Letras maiúsculas e números | Identifica a pessoa jurídica |
| Ordem do estabelecimento | 9 a 12 | Somente números | Letras maiúsculas e números | Identifica matriz ou filial |
| Dígitos verificadores | 13 e 14 | Somente números | Somente números | Valida a sequência pelo cálculo do módulo 11 |
Importante
O formato mascarado continuará visualmente semelhante ao atual: 12.ABC.345/01DE-35. Porém, internamente, o ideal é armazenar o CNPJ sem máscara: 12ABC34501DE35.
Quem será impactado pelo CNPJ alfanumérico?
Validações, regex, DTOs, schemas, máscaras e testes precisarão aceitar letras nas 12 primeiras posições.
DBAs
Campos numéricos precisam ser migrados para texto. Índices, constraints, procedures e views devem ser revisados.
ERPs e sistemas fiscais
Cadastros de empresas, fornecedores, clientes, filiais, notas fiscais e integrações fiscais exigem atenção especial.
SaaS B2B
Onboarding, billing, antifraude, KYC, CRM e integrações com terceiros devem aceitar o novo padrão.
Contabilidades
Sistemas contábeis, importadores, relatórios e bases de clientes precisam tratar CNPJ como identificador textual.
APIs e integrações
Contratos OpenAPI, validação de payloads, webhooks, filas, ETL e data lakes precisam ser atualizados.
Como calcular o dígito verificador do CNPJ alfanumérico?
| Caractere | Valor ASCII | Valor para cálculo |
|---|---|---|
| 0 a 9 | 48 a 57 | 0 a 9 |
| A | 65 | 17 |
| B | 66 | 18 |
| C | 67 | 19 |
| Z | 90 | 42 |
Passo a passo do primeiro dígito verificador
- Remova pontos, barra e hífen.
- Use os 12 primeiros caracteres.
- Converta cada caractere para seu valor de cálculo.
- Aplique os pesos:
5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2. - Multiplique valor por peso e some tudo.
- Calcule o resto da divisão por 11.
- Se o resto for 0 ou 1, o DV é 0. Caso contrário, o DV é
11 - resto.
Passo a passo do segundo dígito verificador
- Acrescente o primeiro DV ao final dos 12 primeiros caracteres.
- Aplique os pesos:
6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2. - Repita a mesma regra do módulo 11.
Exemplo oficial simplificado
Para a base 12ABC34501DE, os caracteres são convertidos para:
1, 2, 17, 18, 19, 3, 4, 5, 0, 1, 20, 21
O resultado final do exemplo é 12.ABC.345/01DE-35.
Regex para validar formato do CNPJ alfanumérico
| Uso | Regex | Observação |
|---|---|---|
| Sem máscara | ^[0-9A-Z]{12}[0-9]{2}$ |
Recomendado para armazenamento e APIs internas. |
| Com máscara obrigatória | ^[0-9A-Z]{2}\.[0-9A-Z]{3}\.[0-9A-Z]{3}/[0-9A-Z]{4}-[0-9]{2}$ |
Útil para interface com máscara clássica. |
| Com ou sem máscara | ^[0-9A-Z]{2}\.?[0-9A-Z]{3}\.?[0-9A-Z]{3}/?[0-9A-Z]{4}-?[0-9]{2}$ |
Boa para entrada flexível do usuário. |
Erro comum
Não use regex como única validação. Um CNPJ pode ter formato correto e mesmo assim ter dígito verificador inválido.
Validação de CNPJ alfanumérico em TypeScript
TypeScript — validar CNPJ alfanumérico
const CNPJ_ALFA_REGEX = /^[0-9A-Z]{12}[0-9]{2}$/;
```
const WEIGHTS_DV1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;
const WEIGHTS_DV2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] as const;
function normalizeCnpj(value: string): string {
return value
.toUpperCase()
.replace(/[.-/\s]/g, "");
}
function charToDvValue(char: string): number {
return char.charCodeAt(0) - 48;
}
function calculateDigit(input: string, weights: readonly number[]): number {
const sum = input
.split("")
.reduce((acc, char, index) => {
return acc + charToDvValue(char) * weights[index];
}, 0);
const rest = sum % 11;
return rest < 2 ? 0 : 11 - rest;
}
export function isValidCnpjAlfanumerico(value: string): boolean {
const cnpj = normalizeCnpj(value);
if (!CNPJ_ALFA_REGEX.test(cnpj)) {
return false;
}
const body = cnpj.slice(0, 12);
const expectedDv1 = calculateDigit(body, WEIGHTS_DV1);
const expectedDv2 = calculateDigit(`${body}${expectedDv1}`, WEIGHTS_DV2);
return cnpj.slice(12) === `${expectedDv1}${expectedDv2}`;
}
// Exemplos:
console.log(isValidCnpjAlfanumerico("12.ABC.345/01DE-35")); // true
console.log(isValidCnpjAlfanumerico("12ABC34501DE35")); // true
“`
Dicas avançadas para implementação em JavaScript/TypeScript
- Normalize antes de validar: remova máscara, espaços e converta para uppercase.
- Não use parseInt no CNPJ inteiro: CNPJ não é número, é identificador.
- Não converta letras manualmente com switch enorme:
charCodeAt(0) - 48é simples e segue a regra oficial. - Separe formato de DV: crie funções independentes para normalização, regex e cálculo do dígito verificador.
- Teste CNPJs antigos e novos: o sistema precisa continuar aceitando o formato numérico tradicional.
Bibliotecas open source para CNPJ alfanumérico
Além da documentação oficial da Receita Federal e do Serpro, já existem projetos open source que ajudam desenvolvedores a validar, gerar e formatar CNPJs no novo padrão alfanumérico. Para JavaScript e TypeScript, boas opções são @fnando/cnpj, cnpj-cpf-validator, cnpj-universal e gerador-validador-cnpj. Em Java, o projeto cnpj-alfanumerico de JohnPitter é uma alternativa focada em validação, formatação e geração com compatibilidade Java 8+. Para Python e QA, o robotframework-cnpjalfanum pode ajudar na geração de massas de teste e validações automatizadas. Em PHP, o fgsl/cnpj implementa cálculo de DV e validação com PHPUnit. Para C#/.NET, há exemplos como FRACerqueira/CnpjAlfaNumerico e validacao-novo-cnpj. Também já existem alternativas para Go e Ruby.
Antes de usar qualquer biblioteca em produção, verifique licença, testes, manutenção, compatibilidade com CNPJs antigos e novos, suporte a máscara, cálculo correto do DV e comportamento com letras minúsculas, espaços, pontuação e entradas inválidas.
| Linguagem/ecossistema | Projeto | O que faz | Uso recomendado |
|---|---|---|---|
| JavaScript / TypeScript / Node | @fnando/cnpj | Biblioteca para gerar, validar e formatar CNPJ; já declara suporte ao novo algoritmo alfanumérico de julho/2026. | Boa opção geral para Node, front-end e validações simples. (GitHub) |
| TypeScript / Node | FredericoSFerreira/cnpj-cpf-validator | Valida e formata CPF/CNPJ, com suporte ao novo CNPJ alfanumérico, zero dependências, ESM/CJS e tipos TypeScript. | Boa opção para projetos TS/JS genéricos. (GitHub) |
| TypeScript / Node / NestJS | LeandroGazoli/cnpj-universal | Validador type-safe para CNPJ legado e alfanumérico, compatível com NestJS e class-validator, incluindo decorator @IsCNPJ. |
Excelente para NestJS, DTOs e APIs B2B. (GitHub) |
| JavaScript / Deno / Bun / Browser | @tiagoporto/gerador-validador-cnpj | Biblioteca JS para gerar e validar CNPJ alfanumérico; funciona em Node, Deno, Bun, browsers e Cloudflare Workers. | Boa opção moderna e multi-runtime. (JSR) |
| Java | JohnPitter/cnpj-alfanumerico | Biblioteca Java zero dependências para validação, formatação e geração de CNPJ alfanumérico, com compatibilidade Java 8, 11, 17 e 21. | Melhor achado para Java/ERP/backend corporativo. (GitHub) |
| Python / Robot Framework / QA | robotframework-cnpjalfanum | Biblioteca Python para geração, validação e formatação de CNPJ alfanumérico, com keywords para Robot Framework. | Muito útil para QA, testes automatizados e massa fictícia. (PyPI) |
| PHP | fgsl/cnpj | Componente PHP para validar CNPJ alfanumérico; possui calculaDV() e isValid(), com testes em PHPUnit. |
Boa opção para PHP puro; atenção à licença GPL-3.0. (GitHub) |
| PHP / Laravel / Multi-exemplos | marcelo-lourenco/validador-cnpj-alfanumerico | Projeto com exemplos em JavaScript, Java, Python, TypeScript, PHP e Laravel; inclui demo web. | Ótimo para artigo, estudo e comparação entre linguagens. (GitHub) |
| C# / .NET | FRACerqueira/CnpjAlfaNumerico | Validador C#/.NET com regra ASCII-48 e módulo 11; projeto MIT. | Boa base para portar para sistemas .NET. (GitHub) |
| C# / .NET didático | emanuelsampaio/validacao-novo-cnpj | Explica e implementa validação do novo CNPJ em C#, com passo a passo do módulo 11 e ASCII-48. | Excelente para trecho didático no artigo. (GitHub) |
| Go | Daniel60/validador_cnpj_alfanumerico | Módulo Go para limpar, validar e calcular dígitos verificadores de CNPJ; integra com go-playground/validator. |
Bom achado para Go, mas eu trataria como “avaliar antes de produção”, pois o pkg.go.dev sinaliza que o pacote não está na última versão do módulo. (Go Packages) |
| Ruby | fnando/cpf_cnpj | Gem Ruby para validar, gerar e formatar CPF/CNPJ; declara suporte ao novo algoritmo alfanumérico de julho/2026. | Melhor achado para Ruby/Rails. (GitHub) |
| Angular / TypeScript / Demo web | pedrorivald/cnpj-alfanumerico | Aplicação Angular para gerar e validar CNPJs alfanuméricos, com interface web e classe utilitária. | Bom para demo visual no artigo ou inspiração de playground. (GitHub) |
Inclua uma observação forte no artigo: biblioteca não substitui estratégia de migração. Mesmo com uma lib pronta, o time ainda precisa revisar banco de dados, DTOs, OpenAPI, filas, webhooks, importadores CSV, relatórios, ETL, integrações fiscais e validações antigas que fazem “somente números”.
Para o seu stack NestJS/TypeScript, eu testaria primeiro cnpj-universal para DTOs com class-validator, e @fnando/cnpj ou cnpj-cpf-validator como opção mais genérica para utilitários.
| Cenário | Antes | Depois | Risco se não mudar |
|---|---|---|---|
| Coluna SQL | BIGINT, NUMERIC, INTEGER |
CHAR(14) ou VARCHAR(14) |
Letras não serão armazenadas. |
| Normalização | Máscara salva no banco | Valor limpo: 12ABC34501DE35 |
Busca, índice e comparação ficam inconsistentes. |
| Validação | Apenas número | Regex + DV | CNPJs válidos podem ser rejeitados. |
| Índice | Índice numérico | Índice textual no valor normalizado | Consultas por CNPJ podem quebrar ou perder performance. |
ALTER TABLE empresas
```
ADD COLUMN cnpj_normalizado CHAR(14);
ALTER TABLE empresas
ADD CONSTRAINT empresas_cnpj_alfa_format_chk
CHECK (cnpj_normalizado ~ '^[0-9A-Z]{12}[0-9]{2}$');
CREATE INDEX CONCURRENTLY empresas_cnpj_normalizado_idx
ON empresas (cnpj_normalizado);
“`
Dicas avançadas para banco de dados
- Use uma coluna canônica: armazene sempre sem pontuação e em uppercase.
- Não dependa apenas do front-end: aplique validação também na API e, quando fizer sentido, no banco.
- Cuidado com collation: prefira uma configuração previsível para comparação de letras maiúsculas e números.
- Revise índices únicos: se o CNPJ identifica empresa, fornecedor ou cliente, garanta unicidade no valor normalizado.
- Revise views e procedures: funções que removem caracteres não numéricos podem destruir letras do novo CNPJ.
- Não use trim agressivo: qualquer normalizador que mantenha apenas
0-9precisa ser corrigido.
APIs, integrações e contratos: onde o CNPJ pode quebrar
number por string.
components:
```
schemas:
Empresa:
type: object
properties:
cnpj:
type: string
minLength: 14
maxLength: 14
pattern: '^[0-9A-Z]{12}[0-9]{2}$'
example: '12ABC34501DE35'
Estratégia de migração segura: como adaptar sem quebrar produção
Se o seu sistema já está em produção, evite uma mudança brusca em colunas críticas. O melhor caminho é migrar de forma progressiva, com compatibilidade entre CNPJs antigos e novos.
Inventário
Liste todos os pontos onde CNPJ aparece: banco, código, APIs, relatórios, arquivos, integrações e jobs.
Campo novo
Crie uma coluna textual normalizada em paralelo, sem remover a coluna antiga imediatamente.
Backfill
Preencha o campo novo com os CNPJs antigos normalizados, preservando zeros à esquerda.
Dual-write
Durante a transição, grave no modelo antigo e no novo, quando aplicável.
Feature flag
Libere a nova validação de forma controlada para ambientes e clientes específicos.
Cutover
Depois de monitorar erros e consistência, torne o campo novo a fonte principal.
Evite este erro
Não rode um ALTER TABLE crítico em horário de pico sem plano de rollback, índice concorrente, backup validado e teste de carga. CNPJ costuma estar em cadastros centrais e pode impactar faturamento, login, emissão fiscal e integrações.
Checklist técnico para preparar seu sistema para o CNPJ alfanumérico
| Área | O que revisar | Prioridade |
|---|---|---|
| Front-end | Máscaras, regex, inputs, validação client-side e mensagens de erro. | Alta |
| Back-end | DTOs, validators, services, normalizadores e cálculo do DV. | Alta |
| Banco de dados | Tipos de coluna, constraints, índices, unicidade, procedures e views. | Alta |
| APIs | Contratos OpenAPI, webhooks, payloads, filas e versionamento. | Alta |
| Relatórios | Exports CSV, Excel, BI, data warehouse e dashboards. | Média |
| Integrações | ERPs, CRMs, gateways, bancos, sistemas fiscais e fornecedores. | Alta |
| Testes | Casos unitários, integração, regressão, massa sintética e testes com simulador oficial. | Alta |
| Suporte | Treinar atendimento para explicar por que um CNPJ agora pode ter letras. | Média |
Dica avançada para times sênior
Crie um teste automatizado que varre o código procurando padrões perigosos, como onlyNumbers, parseInt(cnpj), Number(cnpj), \d{14}, BIGINT, NUMERIC e funções que removem tudo que não é dígito. Isso costuma revelar pontos escondidos de quebra.
Plano de ação em 7 dias para começar a adaptação
“`
Continue aprendendo
Se você está adaptando sistemas para o CNPJ alfanumérico, também vale revisar automação, IA aplicada ao desenvolvimento e boas práticas de produtividade técnica.
Perguntas frequentes sobre CNPJ alfanumérico
“`
Quando o CNPJ alfanumérico começa a valer?
O novo modelo será implementado em julho de 2026 para novas inscrições no CNPJ.
Meu CNPJ atual vai mudar?
Não. Os CNPJs já existentes continuarão válidos e não precisarão ser alterados.
O novo CNPJ terá quantos caracteres?
O CNPJ continuará tendo 14 posições. As 12 primeiras poderão conter letras maiúsculas e números, e as duas últimas continuarão numéricas.
O cálculo do dígito verificador mudou?
A lógica continua baseada em módulo 11, mas agora letras precisam ser convertidas para valores numéricos usando a tabela ASCII menos 48.
Posso continuar usando regex numérica de CNPJ?
Não para novos CNPJs alfanuméricos. Regex como apenas dígitos ou \d{14} rejeitará inscrições válidas com letras.
Qual tipo de coluna usar no banco de dados?
Use tipo textual, como CHAR(14) ou VARCHAR(14), armazenando o CNPJ normalizado sem máscara.
O CNPJ deve ser armazenado com máscara?
O ideal é armazenar sem máscara e aplicar a formatação apenas na camada de apresentação.
Como testar meu sistema antes de julho de 2026?
Use massas fictícias, testes automatizados e o simulador oficial da Receita Federal para validar inscrições alfanuméricas sem usar dados reais.
“`
Conclusão
O CNPJ alfanumérico não é apenas uma mudança visual. Ele afeta validações, banco de dados, contratos de API, integrações, relatórios, importadores, exportadores e regras de negócio.
A boa notícia é que a transição pode ser feita de forma gradual. Quem começar agora conseguirá adaptar sistemas com segurança, sem correria e com menor risco de quebra em produção.
A recomendação técnica é simples: trate CNPJ como identificador textual, normalize o valor, valide formato e dígito verificador, revise integrações e teste com dados fictícios antes da virada.
Nota editorial: valide periodicamente as informações em fontes oficiais da Receita Federal e do Serpro, pois cronogramas, simuladores, documentos técnicos e orientações operacionais podem receber atualizações até a implementação final.
