METODOLOGIA · BRASIL

Algoritmo do Dígito Verificador do CNPJ

O CNPJ brasileiro, identificador fiscal de pessoas jurídicas, usa Mod-11 em dois passes com pesos diferentes do CPF. Esta página explica os dois passes, inclui um exemplo numérico completo, e detalha 14 casos de borda de produção — incluindo o CNPJ alfanumérico que a Receita Federal está implementando em 2026.

O algoritmo

O CNPJ (Cadastro Nacional da Pessoa Jurídica) é o número de identificação fiscal brasileiro para pessoas jurídicas, emitido pela Receita Federal. Tem 14 dígitos no formato XX.XXX.XXX/XXXX-VV. Os dois últimos dígitos são verificadores calculados via Mod-11 em dois passes, com pesos diferentes dos do CPF.

Passe 1: pesos [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] para os 12 primeiros dígitos. Resto = soma mod 11. Se resto < 2, dígito = 0; caso contrário, 11 − resto.

Passe 2: pesos [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2] para os 12 primeiros dígitos mais o primeiro dígito verificador. Mesma regra.

Exemplo numérico passo a passo

Calculamos os dígitos verificadores para o CNPJ base 11.222.333/0001-??.

Dígitos1 1 2 2 2 3 3 3 0 0 0 1
Pesos 15 4 3 2 9 8 7 6 5 4 3 2
Soma5+4+6+4+18+24+21+18+0+0+0+2 = 102
102 mod 11= 3
11 − 3 = d18
Dígitos1 1 2 2 2 3 3 3 0 0 0 1 8
Pesos 26 5 4 3 2 9 8 7 6 5 4 3 2
Soma6+5+8+6+4+27+24+21+0+0+0+3+16 = 120
120 mod 11= 10
Resto ≥ 2 → 11−101
CNPJ11.222.333/0001-81

Pseudocódigo

digits = strip_non_numeric(input)   // 14 chars
if all_same_digit(digits) → INVALID

W1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
W2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]

d1 = compute_check(digits[0..11], W1)
d2 = compute_check(digits[0..12], W2)

return d1 == digits[12] AND d2 == digits[13]

// compute_check(d, w): sum = Σ d[i]×w[i]; rem = sum mod 11; return rem < 2 ? 0 : 11−rem

Casos de borda que uma implementação simples não trata

  • CNPJs de dígitos todos iguais: passam o algoritmo matematicamente mas são rejeitados explicitamente pela Receita Federal. Diferente do CPF, existem 14 posições — a chance de passar inadvertidamente é menor, mas o caso ainda ocorre em dados sintéticos de teste.
  • Dígitos de filial (posições 9–12): 0001 = matriz, 0002+ = filial. Validar apenas o CNPJ raiz (8 primeiros dígitos) sem considerar o número de filial é um erro comum em cadastros B2B que só verificam o CNPJ da empresa-mãe.
  • CNPJ alfanumérico (Receita Federal 2026+): a Receita está migrando para um CNPJ que pode conter letras nas posições 1–12. Todo algoritmo legado baseado em isdigit() falhará. A nova especificação usa um Mod-97 adaptado para alfanuméricos.
  • Pesos diferentes do CPF: erro frequente de copiar a implementação do CPF e esquecer de trocar os pesos. W1 do CNPJ é [5,4,3,2,9,8,7,6,5,4,3,2], não [10,9,8,7,6,5,4,3,2].
  • CNPJ de instituições financeiras: bancos e financeiras têm CNPJs com padrões específicos regulados pelo Banco Central. Passam a validação de formato mas podem ter restrições adicionais de negócio.
  • Formatos de entrada: 11.222.333/0001-81, 11222333000181, 11 222 333 0001 81 — normalizar todos os não-dígitos antes de validar. Barras, pontos, hífens e espaços são comuns.
  • CNPJ cancelado ou inapto: um CNPJ pode ser válido em formato mas estar suspenso ou cancelado na Receita. Validação de formato não detecta esse estado.
  • Resto < 2 → dígito = 0: mesma regra especial do CPF. Implementações que aplicam 11 − resto sem essa verificação rejeitam CNPJs válidos.
  • CNPJ de entidades do governo: órgãos públicos têm CNPJs com prefixos específicos. Alguns sistemas de B2G precisam detectar e tratar esses casos separadamente.
  • CNPJ em XML de NF-e: o campo CNPJ em NF-e deve ter exatamente 14 dígitos sem formatação. Enviar com máscara (pontos, barra, hífen) resulta em rejeição pela SEFAZ.
  • Batch com múltiplos formatos misturados: lotes de dados reais contêm CNPJs com e sem máscara misturados. Normalizar antes de validar é obrigatório e o custo de normalização em batch pode surpreender.
  • CNPJ de microempreendedor individual (MEI): MEIs têm CNPJ com sufixo /0001-XX como qualquer empresa. A distinção entre MEI e empresa regular não está no CNPJ — está no regime tributário cadastrado.
  • Caracteres invisíveis e encoding: CNPJs extraídos de PDFs de contratos ou e-mails frequentemente contêm espaços non-breaking (U+00A0) que passam por um strip simples de espaços mas quebram a contagem de dígitos.
  • Validação cruzada CNPJ + razão social: um CNPJ válido não garante que corresponda à razão social fornecida. Apenas uma consulta à API da Receita Federal faz esse cruzamento.

Quer pular tudo isso?

Tratar todos esses casos de borda em produção exige semanas de testes e manutenção contínua conforme as regras regulatórias mudam. A API da Normadata trata tudo isso — incluindo casos que nem listamos aqui — com uma única chamada REST.

Fontes

Receita Federal do Brasil — especificação pública do algoritmo de validação do CNPJ.