Gerador de número de CNH para teste
Gere números de registro fictícios para testar o seu sistema e confira se o dígito verificador de um número fecha a conta.
Para conferir o documento de verdade: Validar autenticidade de sua CNH (Senatran, gov.br) (abre em nova aba)
Número gerado
43661268206
CSV (Excel) abre com dois cliques no Excel em português (ponto e vírgula, acentos certos). CSV usa vírgula, para programas e scripts. SQL sai sempre sem máscara, para caber na coluna de tamanho fixo. Importe como texto, para não perder os zeros à esquerda.
Conferir o dígito do número de registro
Confere no seu navegador. Nada do que você digita ou cola é enviado.
Conferir em lote: cole uma coluna da planilha
CSV (Excel) abre com dois cliques no Excel em português (ponto e vírgula, acentos certos). CSV usa vírgula, para programas e scripts.
Esta página trabalha só com o número de registro, de 11 dígitos, e só com a conta do dígito verificador. Ela não consulta a CNH de ninguém e não diz se uma habilitação existe, está vencida ou suspensa. Para conferir uma CNH de verdade, use o serviço oficial Validar autenticidade de sua CNH (abre em nova aba), da Senatran.
O que esta página confere e o que não confere
O número de registro da CNH termina em dois dígitos verificadores, calculados a partir dos nove primeiros. A ferramenta refaz essa conta. Se o resultado bate, o número está bem formado. Só isso.
- Confere: se o número tem 11 dígitos, se não é uma sequência repetida e se os dois dígitos verificadores batem com a base.
- Não confere: se a habilitação existe, a quem pertence, a categoria, a validade, pontos, suspensão ou cassação.
A segunda lista só o cadastro oficial responde. No serviço da Senatran, a pessoa entra com a conta gov.br e informa o CPF, o número de registro e o código de segurança do documento.
Como usar
- Para gerar: escolha a quantidade, de 1 a 10.000, e clique em Gerar. Com uma semente, a lista sai igual toda vez.
- Para conferir o dígito: abra a aba "Conferir dígito", cole o número e veja se a conta fecha. Se não fechar, a mensagem mostra qual dígito era esperado.
- Para o lote: baixe em lista, CSV, CSV (Excel), JSON ou SQL.
Como o número de registro é formado
São 11 dígitos, escritos sem ponto nem traço: nove de base e dois verificadores. Exemplo fictício: 60481723544, em que 604817235 é a base e 44 são os dígitos verificadores.
A CNH traz outros números, como o do formulário e o código de segurança. Eles têm outras regras e não entram aqui. Se o seu sistema tem um campo "número da CNH", quase sempre é o número de registro que ele espera.
Guarde o campo como texto de 11 caracteres. O número pode começar com zero, e uma coluna numérica apaga esse zero.
Como o dígito verificador é calculado
A conta usa módulo 11 duas vezes sobre os mesmos nove dígitos. No 1º dígito, os pesos descem de 9 a 1. No 2º, sobem de 1 a 9. Em cada conta, o dígito é o resto da divisão da soma por 11.
| Dígito da base | 6 | 0 | 4 | 8 | 1 | 7 | 2 | 3 | 5 | Soma |
|---|---|---|---|---|---|---|---|---|---|---|
| Pesos do 1º dígito | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | sem valor |
| Produtos | 54 | 0 | 28 | 48 | 5 | 28 | 6 | 6 | 5 | 180 |
| Pesos do 2º dígito | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | sem valor |
| Produtos | 6 | 0 | 12 | 32 | 5 | 42 | 14 | 24 | 45 | 180 |
Na primeira conta, 180 dividido por 11 dá resto 4, então o 1º dígito é 4. Na segunda, a soma também é 180 e o resto é 4, então o 2º dígito é 4. O número completo é 60481723544.
Digite um número completo para ver a conta.
Conta feita com o número 60481723544.
Gere ou valide outro acima e a conta muda junto.
1º dígito verificador
| 1º dígito | 6 | 0 | 4 | 8 | 1 | 7 | 2 | 3 | 5 |
|---|---|---|---|---|---|---|---|---|---|
| Dígito | 6 | 0 | 4 | 8 | 1 | 7 | 2 | 3 | 5 |
| Peso | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
| Produto | 54 | 0 | 28 | 48 | 5 | 28 | 6 | 6 | 5 |
O DV é o próprio resto: 4.
2º dígito verificador
| 2º dígito | 6 | 0 | 4 | 8 | 1 | 7 | 2 | 3 | 5 |
|---|---|---|---|---|---|---|---|---|---|
| Dígito | 6 | 0 | 4 | 8 | 1 | 7 | 2 | 3 | 5 |
| Peso | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| Produto | 6 | 0 | 12 | 32 | 5 | 42 | 14 | 24 | 45 |
O DV é o próprio resto: 4.
O ajuste quando o resto é 10
Um dígito só vai de 0 a 9, e o resto de uma divisão por 11 pode ser 10. A regra trata esse caso assim:
- Se o resto da primeira conta for 10, o 1º dígito vira 0 e a segunda conta ganha um desconto de 2.
- Na segunda conta, subtraia o desconto do resto. Se o resultado ficar negativo, some 11.
- Se o resultado final for 10, o 2º dígito é 0.
Exemplo com a base 987654321: a primeira soma dá 285, com resto 10, então o 1º dígito é 0 e há desconto. A segunda soma dá 165, com resto 0. Zero menos 2 dá −2, e −2 mais 11 dá 9. O número completo é 98765432109.
É nesse ajuste que as implementações mais erram. Gere um lote, filtre os números em que o 1º dígito é 0 e use-os como caso de teste do seu validador.
Números inválidos para teste negativo
O gerador também cria números errados de propósito, para você testar a mensagem de erro do seu sistema:
- Dígito verificador errado: a base está certa e o final não bate.
- Tamanho errado: 10 ou 12 dígitos.
- Dígitos repetidos:
11111111111e parecidos fecham a conta, mas nenhum cadastro deve aceitar.
Onde um número fictício resolve
Sistemas de frota, locadoras, seguradoras, transportadoras e aplicativos de entrega têm cadastro de motorista. Para testar esse cadastro, você precisa de números que passem na conferência do dígito do próprio sistema, sem copiar o documento de um motorista real para o banco de homologação.
Se o cadastro também pede CPF, gere os dois em colunas separadas na página de massa de teste. Para veículo, use o gerador de RENAVAM e o gerador de placa.
Cuidados legais
Os números são sorteados no seu navegador e não vêm do cadastro de condutores. Um número sorteado pode coincidir com o de uma pessoa real, então não use o resultado para identificar ninguém.
O site gera só o número. Não gera imagem, PDF nem nada que pareça o documento. Apresentar um número inventado como se fosse a sua habilitação pode configurar crime, como falsa identidade (art. 307 do Código Penal).
Código pronto para o seu projeto
// Dígitos verificadores do número de registro (base de 9 dígitos).
function dvCnh(base) {
const d = [...base].map(Number);
let soma1 = 0;
let soma2 = 0;
for (let i = 0; i < 9; i++) {
soma1 += d[i] * (9 - i); // pesos 9 a 1
soma2 += d[i] * (i + 1); // pesos 1 a 9
}
let dv1 = soma1 % 11;
let desconto = 0;
if (dv1 === 10) {
dv1 = 0;
desconto = 2;
}
let dv2 = (soma2 % 11) - desconto;
if (dv2 < 0) dv2 += 11;
if (dv2 === 10) dv2 = 0;
return String(dv1) + String(dv2);
}
function digitoCnhConfere(numero) {
const n = String(numero).replace(/\D/g, '');
if (n.length !== 11 || /^(\d)\1{10}$/.test(n)) return false;
return dvCnh(n.slice(0, 9)) === n.slice(9);
}
digitoCnhConfere('60481723544'); // true
digitoCnhConfere('98765432109'); // true (caso do ajuste)
digitoCnhConfere('60481723545'); // false import random
def dv_cnh(base: str) -> str:
d = [int(c) for c in base]
soma1 = sum(x * (9 - i) for i, x in enumerate(d)) # pesos 9 a 1
soma2 = sum(x * (i + 1) for i, x in enumerate(d)) # pesos 1 a 9
dv1, desconto = soma1 % 11, 0
if dv1 == 10:
dv1, desconto = 0, 2
dv2 = (soma2 % 11 - desconto) % 11 # em Python, o % já devolve positivo
if dv2 == 10:
dv2 = 0
return f"{dv1}{dv2}"
def gerar_cnh(rng: random.Random) -> str:
base = "".join(str(rng.randrange(10)) for _ in range(9))
return base + dv_cnh(base)
rng = random.Random(2026) # mesma semente, mesma lista
massa = [gerar_cnh(rng) for _ in range(100)] -- Confere só o dígito verificador. Não diz se a habilitação existe.
CREATE OR REPLACE FUNCTION cnh_digito_confere(numero text) RETURNS boolean AS $$
DECLARE
n text := regexp_replace(numero, '\D', '', 'g');
soma1 int := 0;
soma2 int := 0;
dv1 int;
dv2 int;
desconto int := 0;
BEGIN
IF n !~ '^\d{11}$' OR n ~ '^(\d)\1{10}$' THEN
RETURN false;
END IF;
FOR i IN 1..9 LOOP
soma1 := soma1 + substr(n, i, 1)::int * (10 - i);
soma2 := soma2 + substr(n, i, 1)::int * i;
END LOOP;
dv1 := soma1 % 11;
IF dv1 = 10 THEN
dv1 := 0;
desconto := 2;
END IF;
dv2 := ((soma2 % 11) - desconto + 11) % 11;
IF dv2 = 10 THEN
dv2 := 0;
END IF;
RETURN substr(n, 10, 2) = dv1::text || dv2::text;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
SELECT cnh_digito_confere('60481723544'); -- true Fontes
Perguntas frequentes
Dá para validar uma CNH de verdade aqui?
Não. Aqui você confere só se o dígito verificador do número de registro fecha a conta. Para saber se uma CNH é autêntica e está regular, use o serviço Validar autenticidade de sua CNH, da Senatran, no gov.br.
O número de CNH gerado funciona em algum cadastro oficial?
Não. Ele passa só no cálculo do dígito. Não está no cadastro de condutores e é recusado em qualquer consulta ao Detran ou à Senatran. Serve para teste de software.
Quantos dígitos tem o número de registro da CNH?
Tem 11 dígitos: nove de base e dois dígitos verificadores, escritos sem pontuação.
O site gera a imagem ou o PDF da CNH?
Não. O site gera apenas números para teste de software. Não produz imagem, PDF, QR Code nem qualquer coisa que pareça o documento.
Se o dígito confere, a CNH é válida?
Não necessariamente. O dígito mostra só que o número não tem erro de digitação. A habilitação pode não existir, estar vencida ou suspensa, e isso só o cadastro oficial informa.
Os números que eu gero ou confiro ficam salvos?
Não. Tudo é calculado no seu navegador e nenhum número é enviado ao servidor.
Veja também
Gerador de RENAVAM
RENAVAM fictício de 11 dígitos, com os zeros à esquerda e o dígito certo.
13712274717Gerador de placa
Placas fictícias no padrão Mercosul ou no antigo, com a conversão de um para o outro.
DJT1G27Gerador de CPF
CPFs fictícios, por estado de emissão, um a um ou em lote.
137.122.747-00Massa de teste
Vários tipos de número num arquivo só, uma coluna por tipo, até 10.000 linhas.
cnpj,cpf,pisAtualizado em 14/11/2026.