Atualizado em 10/03/2026: A Nota Técnica ENCAT 2025.001 confirmou as datas de homologação (06/04/2026) e produção (06/07/2026) para os documentos fiscais eletrônicos. A Receita Federal também sinalizou que o rollout será gradual, começando por grandes empresas. Em breve publicaremos um artigo dedicado aos desdobramentos da implementação.
A Receita Federal publicou em outubro de 2024 a Instrução Normativa RFB nº 2.229/2024, determinando que a partir de julho de 2026, novas inscrições no CNPJ passarão a incluir caracteres alfanuméricos — letras de A a Z além dos dígitos de 0 a 9.
A mudança não afeta CNPJs já existentes. Se a sua empresa tem CNPJ 12.345.678/0001-95, ele continua exatamente assim. O novo formato vale apenas para novas inscrições a partir da data de corte.
O motivo é prático: o sistema numérico atual suporta cerca de 100 milhões de combinações. Com aproximadamente 60 milhões de registros ativos e cerca de 6 milhões de novas empresas por ano, o esgotamento das combinações disponíveis é uma questão de poucos anos. A introdução de letras expande o espaço de endereçamento para bilhões de combinações.
Este artigo aborda o tema sob a ótica do desenvolvedor: o que muda no formato, como calcular o novo dígito verificador, o que revisar nos seus sistemas e código funcional para validação.
O que muda no formato
O CNPJ continuará com 14 posições — o mesmo tamanho de hoje. A diferença está no conjunto de caracteres aceitos em cada grupo de posições:
| Posições | Função | Formato atual | Formato novo |
|---|---|---|---|
| 1–8 | Raiz (identificação) | Somente dígitos (0–9) | Alfanumérico (0–9, A–Z) |
| 9–12 | Ordem do estabelecimento | Somente dígitos (0–9) | Alfanumérico (0–9, A–Z) |
| 13–14 | Dígitos verificadores | Somente dígitos (0–9) | Somente dígitos (0–9) |
Na prática, as 12 primeiras posições passam a aceitar letras maiúsculas, enquanto os dois dígitos verificadores permanecem numéricos.
A máscara de exibição com pontos, barra e hífen segue o mesmo padrão — o que muda é o conteúdo de cada posição.
Letras aceitas
Há indicações em discussões técnicas do ENCAT de que algumas letras podem ser excluídas do conjunto permitido (possivelmente I, O, U, Q e F, para evitar confusão visual). Até a data de publicação deste artigo, a Receita Federal não confirmou oficialmente a lista restrita. A recomendação é codificar de forma defensiva: aceitar A–Z por enquanto e ajustar quando a lista definitiva for publicada.
Acompanhe a página oficial da RFB: CNPJ Alfanumérico.
Novo cálculo do dígito verificador
O cálculo do dígito verificador continua usando Módulo 11 com pesos de 2 a 9 — o mesmo algoritmo conceitual dos CNPJs numéricos. A diferença é como cada caractere é convertido para valor numérico antes da multiplicação.
Regra de conversão
Cada caractere (dígito ou letra) é convertido pelo seu valor decimal ASCII subtraído de 48:
Valor para DV = código ASCII do caractere − 48
Isso produz a seguinte tabela:
| Caractere | ASCII | Valor DV |
|---|---|---|
0 |
48 | 0 |
1 |
49 | 1 |
2 |
50 | 2 |
| ... | ... | ... |
9 |
57 | 9 |
A |
65 | 17 |
B |
66 | 18 |
C |
67 | 19 |
| ... | ... | ... |
Z |
90 | 42 |
O detalhe elegante dessa abordagem: para CNPJs numéricos, ord('0') - 48 = 0, ord('1') - 48 = 1, etc. — ou seja, a conversão reproduz o comportamento atual. O novo algoritmo é retrocompatível por design.
Passo a passo com exemplo
Usando o CNPJ alfanumérico fictício 12ABC34501DE (exemplo da documentação oficial do SERPRO):
Primeiro dígito verificador:
- Converter cada caractere para o valor DV:
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 pesos de 2 a 9 da direita para a esquerda (reiniciando após o 9):
Peso: 5 4 3 2 9 8 7 6 5 4 3 2
- Multiplicar valor × peso e somar:
5 + 8 + 51 + 36 + 171 + 24 + 28 + 30 + 0 + 4 + 60 + 42 = 459
- Calcular o resto:
459 % 11 = 8 - Como o resto é ≥ 2: 1º DV = 11 − 8 = 3
Segundo dígito verificador:
Repetir o processo incluindo o primeiro DV como 13º caractere:
CNPJ: 1 2 A B C 3 4 5 0 1 D E 3
Valor: 1 2 17 18 19 3 4 5 0 1 20 21 3
Peso: 6 5 4 3 2 9 8 7 6 5 4 3 2
Somatório: 6 + 10 + 68 + 54 + 38 + 27 + 32 + 35 + 0 + 5 + 80 + 63 + 6 = 424
Resto: 424 % 11 = 6 → 2º DV = 11 − 6 = 5
Resultado final: 12.ABC.345/01DE-35
Se o resto for 0 ou 1, o dígito verificador é 0 (zero).
Impacto em sistemas existentes
A mudança é simples em conceito, mas o impacto depende de quantos pontos do seu sistema tocam em campos de CNPJ. Abaixo, os principais pontos de atenção.
Banco de dados
Se o campo de CNPJ está armazenado como INT, BIGINT ou qualquer tipo numérico, ele precisa migrar para VARCHAR(14) ou CHAR(14). Sem essa mudança, o banco rejeita qualquer CNPJ com letras.
Para quem já usa VARCHAR ou TEXT, verifique se há constraints que rejeitam letras — um CHECK com regex do tipo ^\d{14}$ vai barrar os novos CNPJs. Índices criados sobre colunas numéricas podem ter comportamento diferente (collation, ordenação) ao migrar para string — vale testar a performance de queries críticas após a conversão.
Validação no código
A maioria dos sistemas valida CNPJ com regex como ^\d{14}$ ou ^\d{2}\.\d{3}\.\d{3}/\d{4}-\d{2}$. Ambos rejeitam letras.
A regex atualizada para o CNPJ sem máscara deve aceitar alfanuméricos nas 12 primeiras posições e dígitos nos 2 últimos:
^[A-Z0-9]{12}\d{2}$
Com máscara:
^[A-Z0-9]{2}\.[A-Z0-9]{3}\.[A-Z0-9]{3}/[A-Z0-9]{4}-\d{2}$
Além da regex, a função de cálculo do DV precisa ser atualizada para usar a conversão ASCII descrita na seção anterior.
Frontend e máscaras de input
Campos de formulário que formatam CNPJ com máscara (pontos, barra, hífen) geralmente só aceitam dígitos. É necessário permitir letras maiúsculas nas 12 primeiras posições do input. O inputmode="numeric" em campos de CNPJ no mobile precisará ser removido ou ajustado, já que o teclado numérico não exibe letras.
Integrações
APIs que enviam ou recebem CNPJ precisam aceitar o novo formato. Isso inclui integrações com gateways de pagamento, emissores de nota fiscal (NF-e, NFS-e), sistemas bancários, CRMs e ERPs. Os schemas XML de documentos fiscais eletrônicos já foram atualizados pela SEFAZ para aceitar o formato alfanumérico.
Testes
A Receita Federal disponibilizou um Simulador Nacional de CNPJ Alfanumérico que gera CNPJs fictícios no novo formato. Use-o para criar dados de teste e inclua CNPJs alfanuméricos na sua suíte de testes automatizados desde já — não espere julho de 2026.
A Nota Técnica ENCAT 2025.001 confirmou que o ambiente de homologação das SEFAZs aceitará CNPJs alfanuméricos a partir de 06 de abril de 2026, e o ambiente de produção a partir de 06 de julho de 2026. Antes dessas datas, os sistemas rejeitarão qualquer CNPJ alfanumérico, mesmo que passe na validação de schema.
Código: validando CNPJ alfanumérico
Abaixo, implementações funcionais em Python e JavaScript. Ambas aceitam CNPJ com ou sem máscara, suportam o formato numérico atual e o novo alfanumérico, e calculam os dois dígitos verificadores pelo Módulo 11 com conversão ASCII.
Python
import re
def validar_cnpj(cnpj: str) -> bool:
"""
Valida CNPJ numérico ou alfanumérico.
Aceita com ou sem máscara (pontos, barra, hífen).
"""
# Remove máscara
cnpj = re.sub(r'[.\-/]', '', cnpj).upper()
# 14 caracteres: 12 alfanuméricos + 2 dígitos
if not re.match(r'^[A-Z0-9]{12}\d{2}$', cnpj):
return False
# Rejeitar sequências uniformes (ex: "00000000000000")
if len(set(cnpj)) == 1:
return False
def char_value(c: str) -> int:
return ord(c) - 48
def calc_dv(chars: str, weights: list[int]) -> int:
total = sum(char_value(c) * w for c, w in zip(chars, weights))
remainder = total % 11
return 0 if remainder < 2 else 11 - remainder
# Primeiro DV: 12 caracteres, pesos [5,4,3,2,9,8,7,6,5,4,3,2]
weights_1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
dv1 = calc_dv(cnpj[:12], weights_1)
# Segundo DV: 13 caracteres, pesos [6,5,4,3,2,9,8,7,6,5,4,3,2]
weights_2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
dv2 = calc_dv(cnpj[:12] + str(dv1), weights_2)
return cnpj[-2:] == f"{dv1}{dv2}"
# Testes
assert validar_cnpj("12.ABC.345/01DE-35") == True # alfanumérico (exemplo SERPRO)
assert validar_cnpj("12ABC34501DE35") == True # sem máscara
assert validar_cnpj("11.222.333/0001-81") == True # numérico tradicional
assert validar_cnpj("11.222.333/0001-82") == False # DV inválido
assert validar_cnpj("00.000.000/0000-00") == False # sequência uniforme
print("Todos os testes passaram.")
JavaScript / Node.js
/**
* Valida CNPJ numérico ou alfanumérico.
* Aceita com ou sem máscara (pontos, barra, hífen).
* @param {string} cnpj
* @returns {boolean}
*/
function validarCnpj(cnpj) {
// Remove máscara
cnpj = cnpj.replace(/[.\-/]/g, "").toUpperCase();
// 14 caracteres: 12 alfanuméricos + 2 dígitos
if (!/^[A-Z0-9]{12}\d{2}$/.test(cnpj)) return false;
// Rejeitar sequências uniformes
if (new Set(cnpj).size === 1) return false;
const charValue = (c) => c.charCodeAt(0) - 48;
function calcDv(chars, weights) {
const total = chars
.split("")
.reduce((sum, c, i) => sum + charValue(c) * weights[i], 0);
const remainder = total % 11;
return remainder < 2 ? 0 : 11 - remainder;
}
const weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
const weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2];
const dv1 = calcDv(cnpj.slice(0, 12), weights1);
const dv2 = calcDv(cnpj.slice(0, 12) + dv1, weights2);
return cnpj.slice(-2) === `${dv1}${dv2}`;
}
// Testes
console.assert(validarCnpj("12.ABC.345/01DE-35") === true);
console.assert(validarCnpj("12ABC34501DE35") === true);
console.assert(validarCnpj("11.222.333/0001-81") === true);
console.assert(validarCnpj("11.222.333/0001-82") === false);
console.assert(validarCnpj("00.000.000/0000-00") === false);
console.log("Todos os testes passaram.");
cURL + API FonteData
Se você não quer manter a lógica de validação no seu sistema, pode delegar para uma API que já trata ambos os formatos. A FonteData aceita CNPJ alfanumérico em todas as consultas:
# Consulta com CNPJ alfanumérico — a FonteData já suporta
curl -H "X-API-Key: SUA_API_KEY" \
https://app.fontedata.com/api/v1/cnpj/A1B2C3D4E5F690
A resposta retorna os dados cadastrais completos do CNPJ, sem que o desenvolvedor precise implementar validação, conversão de formato ou tratamento de erro relacionado ao novo padrão. A API aceita tanto o formato numérico atual quanto o alfanumérico, com ou sem máscara.
Checklist de preparação
Resumo acionável para levar ao time de engenharia:
- Banco de dados: auditar campos de CNPJ — migrar tipos numéricos para
VARCHAR(14)ouCHAR(14), revisar constraints e índices - Regex de validação: atualizar para aceitar
[A-Z0-9]nas 12 primeiras posições - Cálculo do DV: implementar conversão via ASCII (
ord(char) - 48) ou adotar API que já suporta - Frontend: atualizar máscaras de input para aceitar letras maiúsculas, remover
inputmode="numeric"de campos de CNPJ - Integrações: verificar que APIs, webhooks e schemas XML aceitam caracteres alfanuméricos no campo de CNPJ
- Testes automatizados: incluir CNPJs alfanuméricos gerados pelo Simulador da RFB
- Monitoramento: acompanhar comunicados da RFB sobre a lista definitiva de letras aceitas
Conclusão
A migração para CNPJ alfanumérico é direta em conceito — letras entram no identificador, o cálculo do DV ganha uma conversão via ASCII, e o tamanho permanece o mesmo. O impacto real depende de quantos sistemas na sua stack tocam campos de CNPJ: banco de dados, validações, máscaras, integrações fiscais, gateways de pagamento.
Quem se preparar antes de julho de 2026 evita a correria quando os primeiros CNPJs com letras começarem a circular. O checklist acima cobre os pontos principais — comece pela auditoria do banco de dados e pelas funções de validação.
A FonteData já suporta CNPJ alfanumérico em todas as consultas. Crie sua conta grátis e teste com R$50 em créditos — sem cartão de crédito.
Referências
Experimente a API da FonteData
Consulte dados empresariais e de pessoas via API — CNPJ, CPF, KYC, compliance e mais. R$50 em créditos grátis para testar.
Criar conta grátis →