Pular para o conteúdo
ValidadorCNPJ Gerar CNPJ

Módulo 11 explicado

Cálculo do dígito verificador do CNPJ

A conta completa, com tabela de valores, pesos, somas e restos — usando o exemplo oficial 12.ABC.345/01DE-35. Digite qualquer CNPJ abaixo para ver o cálculo dele.

Aceita letras e números Sem cadastro e sem limite Nada sai do seu navegador

Testar com:

A regra em uma frase

valor do caractere = código ASCII − 48 · pesos 2 a 9 da direita para a esquerda · soma ÷ 11 · resto < 2 → dígito 0, senão dígito = 11 − resto

Passo 1 — converter cada caractere em número

Antes de qualquer multiplicação, cada posição do CNPJ vira um número. A conversão é o código do caractere na tabela ASCII menos 48:

GrupoValores usados no cálculo
Dígitos0 = 0 · 1 = 1 · 2 = 2 · 3 = 3 · 4 = 4 · 5 = 5 · 6 = 6 · 7 = 7 · 8 = 8 · 9 = 9
LetrasA = 17 · B = 18 · C = 19 · D = 20 · E = 21 · F = 22 · G = 23 · H = 24 · I = 25 · J = 26 · K = 27 · L = 28 · M = 29 · N = 30 · O = 31 · P = 32 · Q = 33 · R = 34 · S = 35 · T = 36 · U = 37 · V = 38 · W = 39 · X = 40 · Y = 41 · Z = 42

É essa escolha que garante a compatibilidade total com o formato antigo: como 0 vale 0 e 9 vale 9, um CNPJ puramente numérico produz exatamente o mesmo resultado no algoritmo novo e no antigo.

Passo 2 — aplicar os pesos

Os pesos vão de 2 a 9, contados da direita para a esquerda, e recomeçam em 2 depois do 9. Para os 12 caracteres da base, lidos da esquerda para a direita, a sequência fica:

5 · 4 · 3 · 2 · 9 · 8 · 7 · 6 · 5 · 4 · 3 · 2

E para os 13 caracteres do segundo dígito:

6 · 5 · 4 · 3 · 2 · 9 · 8 · 7 · 6 · 5 · 4 · 3 · 2

Uma forma prática de escrever isso em código, sem tabela fixa, é peso = ((tamanho - 1 - índice) % 8) + 2 — funciona para os dois tamanhos.

Passo 3 — somar, dividir por 11 e achar o dígito

  1. Separe a base dos dígitos verificadores. Em 12.ABC.345/01DE-35, a base são os 12 primeiros caracteres: 12ABC34501DE. Os dois últimos (35) são o que vamos recalcular.
  2. Converta cada caractere em número. O valor é o código ASCII do caractere menos 48. Números viram eles mesmos (0→0, 9→9) e letras começam em 17 (A→17, B→18, até Z→42).
  3. Multiplique pelos pesos. Da direita para a esquerda, os pesos são 2, 3, 4, 5, 6, 7, 8, 9 e recomeçam em 2.
  4. Some tudo e divida por 11. Se o resto for 0 ou 1, o dígito é 0. Caso contrário, o dígito é 11 menos o resto.
  5. Repita para o segundo dígito, agora com 13 caracteres: a base mais o primeiro dígito que você acabou de calcular.

1º dígito verificador — base 12ABC34501DE

1º dígito verificador — base 12ABC34501DE
CaractereValor (ASCII − 48)PesoProduto
1155
2248
A17351
B18236
C199171
33824
44728
55630
0050
1144
D20360
E21242
Soma459

459 ÷ 11 deixa resto 8. Como o resto é 2 ou maior, o dígito é 11 − 8 = 3.

2º dígito verificador — base + 3 = 12ABC34501DE3

2º dígito verificador — base + 3 = 12ABC34501DE3
CaractereValor (ASCII − 48)PesoProduto
1166
22510
A17468
B18354
C19238
33927
44832
55735
0060
1155
D20480
E21363
3326
Soma424

424 ÷ 11 deixa resto 6. Como o resto é 2 ou maior, o dígito é 11 − 6 = 5.

Juntando os dois: o dígito verificador de 12ABC34501DE é 35, ou seja, o CNPJ completo é 12.ABC.345/01DE-35 — exatamente o exemplo divulgado pela Receita Federal.

Conferindo com o CNPJ numérico antigo

Vale repetir a conta com um CNPJ tradicional para ver que nada mudou. Tomando a base 112223330001:

1×5 + 1×4 + 2×3 + 2×2 + 2×9 + 3×8 + 3×7 + 3×6 + 0×5 + 0×4 + 0×3 + 1×2 = 123 123 ÷ 11 → resto 2 → dígito = 11 − 2 = 8

Repetindo para os 13 caracteres 1122233300018 chega-se ao segundo dígito 1, formando 11.222.333/0001-81 — o CNPJ de exemplo mais conhecido do país, validado pelo algoritmo novo sem nenhuma adaptação.

Implementações

O trecho abaixo é a tradução literal dos três passos. A mesma função existe nesta página em 10 linguagens.

cálculo do DV
function digito(sequencia) {
  let soma = 0;
  for (let i = 0; i < sequencia.length; i += 1) {
    const valor = sequencia.charCodeAt(i) - 48;
    const peso = ((sequencia.length - 1 - i) % 8) + 2;
    soma += valor * peso;
  }
  const resto = soma % 11;
  return resto < 2 ? 0 : 11 - resto;
}

function calcularDv(base) {
  const primeiro = digito(base);              // sobre 12 caracteres
  const segundo = digito(`${base}${primeiro}`); // sobre 13 caracteres
  return `${primeiro}${segundo}`;
}

calcularDv('12ABC34501DE'); // '35'
calcularDv('112223330001');    // '81'
Erro clássico: calcular os dois dígitos em paralelo a partir da mesma base. O segundo dígito depende do primeiro — ele é calculado sobre 13 caracteres, não sobre 12.

O cálculo na sua linguagem

Dúvidas sobre o cálculo

Por que subtrair 48 do código ASCII?

Porque 48 é o código ASCII do caractere 0. Subtraindo 48, os dígitos 0 a 9 passam a valer exatamente 0 a 9 — o que preserva o cálculo dos CNPJs antigos — e as letras, que vêm depois na tabela, ganham valores a partir de 17 (A = 65 − 48).

Por que as letras começam em 17 e não em 10?

Porque entre o caractere 9 (ASCII 57) e o caractere A (ASCII 65) existem sete símbolos na tabela ASCII: :, ;, <, =, >, ? e @. A regra escolhida pela Receita Federal foi usar o valor ASCII direto, sem remapear, o que deixa esse intervalo vago.

Os pesos mudaram no CNPJ alfanumérico?

Não. Continuam sendo 2, 3, 4, 5, 6, 7, 8 e 9 aplicados da direita para a esquerda, reiniciando em 2 quando chegam ao 9. Para os 12 caracteres da base, isso dá a sequência 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 da esquerda para a direita.

O que acontece quando o resto da divisão é 0 ou 1?

O dígito verificador é 0. Essa é a regra clássica do módulo 11 e ela não mudou: resto < 2 → dígito 0, senão dígito = 11 − resto.

O cálculo do segundo dígito usa o primeiro?

Usa. O segundo dígito é calculado sobre 13 caracteres: os 12 da base mais o primeiro dígito verificador recém-calculado. Por isso a ordem importa — não dá para calcular os dois em paralelo.