bateCarimbo.
Documentos

Número da CNH: registro, espelho, RENACH e como o dígito verificador é calculado

Os três números impressos na CNH e o que cada um identifica, o que muda na renovação e na CNH digital, o cálculo completo dos dois dígitos verificadores com exemplo resolvido e por que validadores divergem no caso do resto 10.

Por · Publicado em · 11 min de leitura

Pegue uma CNH e conte os números impressos nela. São pelo menos três, em campos distintos, e apenas um é o que os sistemas costumam chamar de “número da CNH”. Confundir um com o outro é a origem de boa parte dos cadastros de condutor que não batem entre o RH, a transportadora e o aplicativo de entrega — e também da pergunta que aparece toda semana em fórum de desenvolvedor: por que dois validadores de CNH devolvem dígitos diferentes para o mesmo número.

Três números, três funções: registro, espelho e RENACH

O número de registroé o identificador nacional do condutor. Tem onze algarismos, sendo nove de base e dois dígitos verificadores, e é o único dos três que segue uma fórmula pública de conferência. É esse número que deve ser gravado quando um sistema fala em “número da CNH”.

O número do espelho identifica a via física — o cartão em si. Cada emissão gera um espelho novo, então esse número é um dado do documento, não da pessoa. Ele serve para dizer qual via está em circulação e para casar o plástico com o registro do processo de emissão.

O RENACH é o cadastro nacional de condutores habilitados; o campo que aparece com esse nome em formulários e telas de DETRAN é, na prática, o número do processo aberto no órgão estadual, normalmente exibido como a sigla da UF seguida de uma sequência numérica. Ele acompanha o trâmite (exames, aulas, prova, emissão) e é o identificador que o despachante e o atendente usam para consultar o andamento. Não tem dígito verificador publicado, não é nacionalmente único no mesmo sentido do registro e não deve ser usado como chave de condutor.

Há ainda um código de segurançaimpresso no documento, que serve à conferência da via e não identifica o condutor. Se o seu cadastro tem um único campo chamado “CNH”, ele precisa guardar o registro — os outros são dados auxiliares, quando muito.

O que muda quando o condutor renova ou tira segunda via

O registro é atribuído na primeira habilitação e acompanha a pessoa. Na renovação, na mudança de categoria, na troca de estado ou na segunda via por perda, o registro continua o mesmo; o que muda é o espelho, a data de validade e, eventualmente, o processo RENACH aberto para aquela emissão.

Essa distinção tem consequência prática em modelagem. Se o seu sistema trata a CNH como campo mutável do cadastro e reescreve o valor a cada atualização de documento, você provavelmente está gravando o número do espelho em algum momento e o registro em outro — e aí dois cadastros do mesmo motorista deixam de se reconhecer. O registro é estável o bastante para servir de chave natural de condutor dentro do seu domínio; o espelho, não.

A CNH digital não cria um número novo. Ela é a mesma habilitação exibida no aplicativo oficial de carteira digital de trânsito, com um QR Code que resolve contra a base do órgão de trânsito. O registro exibido ali é idêntico ao do plástico.

Como o dígito verificador é calculado

Os nove primeiros algarismos formam a base. Os dois últimos saem de dois cálculos de módulo 11 feitos sobre a mesma base, com escadas de pesos espelhadas: o primeiro usa os pesos 9 a 1, da esquerda para a direita; o segundo usa 1 a 9, na mesma direção.

Duas particularidades separam a CNH do CPF. A primeira: o segundo cálculo não inclui o primeiro dígito verificador, ao contrário do que acontece no CPF e no CNPJ. Os dois DVs são calculados em paralelo, a partir do mesmo insumo. A segunda: o dígito é o próprio resto da divisão por 11, e não 11 − resto.

Como os pesos aplicados a cada posição somam 10 nas duas escadas (9 e 1 na primeira posição, 8 e 2 na segunda, e assim por diante), as duas somas guardam uma relação fixa: juntas, dão dez vezes a soma dos algarismos da base. É um bom teste de sanidade quando se está depurando a implementação.

Vamos calcular os dois dígitos da base 064725819. O zero inicial é proposital: registros com zero à esquerda são comuns e já derrubaram muita importação que tratou o campo como número inteiro.

Primeiro dígito verificador — pesos 9 a 1
CaracterePesoProduto
090
6848
4728
7642
2510
5420
8324
122
919
Soma183

183 ÷ 11 → resto 7

O dígito é o próprio resto, desde que ele seja menor que 10.

Dígito verificador = 7

Segundo dígito verificador — pesos 1 a 9, sobre a mesma base
CaracterePesoProduto
010
6212
4312
7428
2510
5630
8756
188
9981
Soma237

237 ÷ 11 → resto 6

Resto menor que 10 e sem desconto a aplicar: o dígito é o resto.

Dígito verificador = 6

O registro completo é 06472581976. Conferindo a relação entre as somas: os algarismos da base somam 42, e 183 + 237 = 420, dez vezes 42.

TypeScript
const BASE_LENGTH = 9;

function calculateCheckDigits(base9: string): string | null {
  let sum1 = 0;
  for (let i = 0; i < BASE_LENGTH; i++) {
    sum1 += Number(base9[i]) * (9 - i);
  }
  const rest1 = sum1 % 11;
  const dv1 = rest1 >= 10 ? 0 : rest1;
  const discount = rest1 >= 10 ? 2 : 0;

  let sum2 = 0;
  for (let i = 0; i < BASE_LENGTH; i++) {
    sum2 += Number(base9[i]) * (i + 1);
  }
  const rest2 = sum2 % 11;
  const dv2 = rest2 >= 10 ? 0 : rest2 - discount;

  // Sem DV possível: a base cai na zona contestada e o segundo
  // dígito ficaria negativo depois do desconto.
  if (dv2 < 0) return null;

  return String(dv1) + String(dv2);
}
A função devolve null quando a base cai na zona em que a regra do desconto não produz um dígito válido — ver a seção seguinte.

O caso do resto 10 e por que validadores discordam

O resto da divisão por 11 vai de 0 a 10, mas um dígito verificador só comporta 0 a 9. Quando o primeiro cálculo dá resto 10, a regra clássica dos DETRANs faz duas coisas: registra 0 como primeiro dígito e aplica um desconto de 2 no segundo. É essa correção que as bibliotecas implementam de maneiras diferentes.

A discordância não é difusa: enquanto o primeiro resto for diferente de 10, todas as implementações que testamos devolvem exatamente o mesmo par de dígitos. O desacordo mora inteiro dentro da zona do resto 10, que cobre cerca de um em cada onze números-base, e mesmo lá só aparece em três dos onze valores possíveis do segundo resto.

Zona contestada: comportamento quando o primeiro resto é 10 (primeiro DV = 0)
Resto do 2º cálculoRegra do descontoImplementações que fazem o desconto circular
0sem dígito possível (0 − 2 seria negativo)09
1sem dígito possível (1 − 2 seria negativo)00
2 a 9resto − 2 (ex.: resto 4 → DV 02)igual
1000 (o 10 vira 0 antes do desconto)08

O exemplo mais claro é a base 646897755. Os dois cálculos dão soma 285 e resto 10 cada um. Pela regra do desconto direto, o número fica 64689775500; por uma implementação que trata o desconto como operação circular sobre o módulo 11, fica 64689775508. Os dois validadores estão convictos e nenhum dos dois aceita o número do outro.

Do outro lado estão as bases como 379393858, em que o primeiro resto é 10 e o segundo é 1: o desconto levaria o segundo dígito a −1, e a implementação estrita conclui que aquela base simplesmente não tem registro válido, enquanto a circular devolve 00.

A consequência para quem gera dados de teste é direta: nunca gere um número cuja base caia nessa zona. O gerador de CNH descarta bases com resto 10 no primeiro cálculo e sorteia outra, de modo que todo número produzido passa nas duas famílias de validadores. Custa cerca de 9% de descarte no sorteio e elimina a classe inteira de falso negativo em ambiente de homologação.

Se você mantém um validador próprio, a recomendação é a mesma vista do outro lado: seja permissivo nessa faixa. Aceitar os dois resultados quando o primeiro resto é 10 é preferível a recusar o documento de um condutor real por divergência de arredondamento.

O que o número não diz: categoria, validade e pontuação

Diferente do CPF, que carrega a região fiscal no nono algarismo, o registro da CNH não codifica nada legível. Não dá para extrair dele o estado emissor, o ano da primeira habilitação nem a categoria.

A categoria (A para motocicletas, B para automóveis, C, D e E para carga e transporte de passageiros, além das combinações como AB) é um atributo separado do cadastro, que muda ao longo da vida do condutor sem tocar no registro. A validade depende da faixa etária e da aptidão no exame médico, e também vive fora do número. A pontuação por infrações fica no prontuário do condutor, atualizada por eventos que nada têm a ver com o documento impresso.

Em outras palavras, um número de CNH com dígitos verificadores corretos não afirma que existe um condutor, que ele está habilitado, que a habilitação está no prazo ou que ele pode dirigir aquele caminhão. O DV é uma barreira contra erro de digitação, não uma prova de nada — a mesma distinção que vale para o CPF válido que não existe.

Como verificar uma CNH de verdade

A checagem real passa pelos canais oficiais. No Portal de Serviços do SENATRAN, o próprio condutor, autenticado com a conta gov.br, consulta a situação da habilitação, a pontuação e os veículos vinculados. O aplicativo oficial de carteira digital exibe o documento com QR Code, que um fiscal ou um balcão pode conferir contra a base. DETRANs estaduais oferecem consultas complementares para quem tem processo aberto naquela UF.

O que não existe é uma consulta pública aberta que, a partir do número, confirme para terceiros se a CNH existe e está válida. Empresas que precisam verificar habilitação de motoristas em escala fazem isso por convênio com o órgão de trânsito ou por intermediários autorizados, com base legal para tratar o dado. Se a sua regra de negócio depende de confirmar habilitação, planeje essa integração desde o começo: validar o DV localmente é o primeiro filtro, nunca a resposta.

Modelando o campo em sistemas de frota, mobilidade e RH

O registro é uma sequência de onze algarismos com zeros significativos à esquerda. Guarde como texto de tamanho fixo, com CHAR(11) ou VARCHAR(11), nunca como inteiro. A normalização de entrada deve remover pontos, hifens e espaços antes de validar, porque o número é digitado de todo jeito.

SQL — PostgreSQL
CREATE TABLE condutor (
  id            bigserial PRIMARY KEY,
  nome          text NOT NULL,
  cnh_registro  char(11) NOT NULL UNIQUE
                CHECK (cnh_registro ~ '^[0-9]{11}$'),
  cnh_categoria text NOT NULL,
  cnh_validade  date NOT NULL,
  renach        text,
  criado_em     timestamptz NOT NULL DEFAULT now()
);
O CHECK garante o formato; a validação dos dígitos continua sendo responsabilidade da aplicação.

Três decisões que costumam ser esquecidas nessa tabela. A categoria é campo próprio porque muda sem que o registro mude. A validade é date e pertence à via atual, então precisa ser atualizada a cada renovação. E o RENACH, se for guardado, fica em coluna separada e sem restrição de unicidade — ele identifica processo, não pessoa.

Em cadastros de frota, a chave de negócio que interessa quase sempre é o par condutor + veículo, e o veículo tem os seus próprios identificadores, como o RENAVAM e a placa. Misturar os dois domínios em uma tabela só é o começo de uma migração dolorosa.

Para popular ambientes de desenvolvimento, homologação e demonstração, use números fictícios com DV correto. Registros reais de motoristas em base de teste são dado pessoal circulando fora da finalidade para a qual foram coletados — o assunto do guia sobre LGPD e dados de teste.

Erros comuns em cadastros de condutores

  • Gravar o espelho no lugar do registro.Acontece quando a tela de cadastro pede “número do documento” e o atendente lê o campo errado do plástico. O sintoma é o mesmo motorista duplicado depois de uma renovação.
  • Perder o zero à esquerda. Planilha, coluna numérica, importação por CSV: o registro 06472581976 vira 6472581976 e nunca mais valida. Converta a coluna para texto antes de exportar.
  • Aceitar sequências repetidas. 11111111111 passa nos dois cálculos de módulo 11 e não é um registro plausível. Barre explicitamente os onze algarismos iguais, como se faz no CPF.
  • Validar o DV e concluir que o condutor está habilitado. Esses são problemas distintos, e o segundo não tem solução local.
  • Trocar de biblioteca de validação sem testar a zona do resto 10. A migração parece inofensiva porque 97,5% dos números continuam válidos. Os registros que quebram são poucos, aparecem meses depois e sempre em produção.
  • Usar CNHs reais para demonstração. Uma tela de demo com documento verdadeiro na frente de um cliente é vazamento com plateia.

Fontes e referências