CNPJ Alfanumérico 2026: Cronograma, Novo Formato e Como Adaptar Seu Sistema

Atualizado em 02/08/2026: o primeiro CNPJ alfanumérico do Brasil já existe. A Receita Federal anunciou a emissão de 00.000.000/E08G-12, uma filial do Banco do Brasil. O assunto deixou de ser preparação para uma data futura: o formato está em produção e passa a circular em cadastros, integrações e documentos fiscais. Se o seu sistema ainda valida CNPJ com ^\d{14}$, ele já está rejeitando um documento válido — a seção "Impacto em sistemas existentes", mais abaixo, é o roteiro do que revisar.

Atualizações anteriores — 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, e a Receita sinalizou rollout gradual, começando por grandes empresas.

Cronograma — CNPJ Alfanumérico

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 passariam a incluir caracteres alfanuméricos — letras de A a Z além dos dígitos de 0 a 9. O prazo venceu: o primeiro CNPJ alfanumérico já foi emitido.

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 continua com 14 posições — o mesmo tamanho de sempre. 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.

Estrutura do CNPJ: formato atual vs. alfanumérico

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

Conversão de caractere para valor DV — tabela ASCII

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

Fluxo de cálculo do dígito verificador do CNPJ alfanumérico

Usando o CNPJ alfanumérico fictício 12ABC34501DE (exemplo da documentação oficial do SERPRO):

Primeiro dígito verificador:

  1. 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
  1. 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
  1. Multiplicar valor × peso e somar:
5 + 8 + 51 + 36 + 171 + 24 + 28 + 30 + 0 + 4 + 60 + 42 = 459
  1. Calcular o resto: 459 % 11 = 8
  2. 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 = 62º 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

Impacto do CNPJ alfanumérico em sistemas

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 — a função de máscara costuma fazer um replace(/\D/g,'') que apaga as letras a cada tecla. É esse o defeito a corrigir: permitir [A-Z0-9] nas 12 primeiras posições do input.

Já o inputmode="numeric" é decisão de UX, não de correção. Ele apenas sugere qual teclado virtual o celular abre — não impede digitação nem colagem de letras num campo type="text". Mantê-lo favorece a maioria numérica e faz o CNPJ alfanumérico entrar por copiar/colar; trocá-lo por text torna o documento com letras digitável no celular, ao custo do teclado grande. Qualquer uma das duas funciona, desde que a máscara pare de descartar as letras — o que não funciona é consertar o teclado e deixar o replace no lugar.

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. Vale lembrar que o mesmo leiaute da NF-e passa por outra virada em 2026 por conta da Reforma Tributária — os grupos de IBS/CBS e as novas regras do campo indIEDest, tratados em Inscrição Estadual e Reforma Tributária: o que muda em 03/08/2026.

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 automatizada agora, porque o formato já está em circulação.

A Nota Técnica ENCAT 2025.001 definiu que o ambiente de homologação das SEFAZs aceitaria CNPJs alfanuméricos a partir de 06 de abril de 2026, e o de produção a partir de 06 de julho de 2026 — ambas as datas já passaram.

Vale um aviso que só aparece na prática: cada sistema da cadeia se adequa no seu próprio ritmo. Portais governamentais com máscara de input em JavaScript, gateways de pagamento e ERPs podem continuar descartando as letras por um tempo, mesmo depois de a norma entrar em vigor. Se você integra com terceiros, vale testar cada um com um CNPJ alfanumérico em vez de presumir que a data resolveu.


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 — o exemplo usa o primeiro CNPJ
# alfanumérico emitido no Brasil, uma filial do Banco do Brasil
curl -H "X-API-Key: SUA_API_KEY" \
  "https://app.fontedata.com/api/v1/consulta/cadastro-pj-basica?cnpj=00000000E08G12"

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) ou CHAR(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.

Os primeiros CNPJs com letras já estão circulando, então não há mais o que antecipar — o que resta é descobrir onde o seu sistema quebra antes que um cliente descubra por você. O checklist acima cobre os pontos principais; comece pela auditoria do banco de dados e pelas funções de validação, que é onde o ^\d{14}$ costuma estar escondido.

Um detalhe que engana: o modo de falha mais comum não é um erro barulhento, é o silencioso. Um replace(/\D/g,'') não rejeita 00.000.000/E08G-12 — ele o transforma em 000000000812, um documento de 12 dígitos que segue adiante e vira erro em outro lugar, longe da causa. Procure pelos filtros de dígito, não só pelas validações.

A FonteData já suporta CNPJ alfanumérico em todas as consultas. Crie sua conta grátis e dobre sua primeira recarga — até R$ 500 em bônus, sem cartão para criar a conta.


Referências

Experimente a API da FonteData

Consulte dados empresariais e de pessoas via API — CNPJ, CPF, KYC, compliance e mais. Dobro da primeira recarga — até R$ 500 em bônus.

Criar conta gratuita →
Compartilhar: LinkedIn Twitter / X
até R$ 500 de bônus na primeira recarga Criar conta gratuita