Python · SDK + algoritmo
Gerador de RENAVAM em Python
Para gerar RENAVAM válido em Python, instale pip install fakeforge-br e chame FakeForge().renavam(n), ou calcule localmente os 10 dígitos de base mais o dígito verificador mod-11 do DENATRAN. Os dois caminhos geram números com 11 dígitos que passam em qualquer validador de formato. Abaixo estão o SDK, o algoritmo completo e testes prontos.
TL;DR
pip install fakeforge-br
from fakeforge import FakeForge
renavams = FakeForge().renavam(100) # 100 RENAVAMs válidos mod-11Free 50 chamadas/dia sem cadastro. Quer ver o gerador no navegador? Use o Gerador de RENAVAM.
Como gerar RENAVAM em Python com o SDK?
A rota mais curta. .renavam(n) devolve uma lista de strings.
from fakeforge import FakeForge
ff = FakeForge()
# 1 RENAVAM formatado (grupos de 4 pra leitura)
renavam = ff.renavam(1)[0]
print(renavam) # "5821 0347 696"
# 1000 RENAVAMs só com os 11 dígitos
renavams = ff.renavam(1000, formatted=False)
# Veículo de teste: RENAVAM + placa Mercosul
renavams = ff.renavam(10, formatted=False)
placas = ff.placa(10)
veiculos = list(zip(renavams, placas))Requer internet, porque o SDK chama o endpoint HTTP. O RENAVAM não é correlacionado com a placa: são dois sorteios independentes, o que basta pra cadastro de teste.
Qual é o algoritmo do RENAVAM em Python?
O RENAVAM (Registro Nacional de Veículos Automotores) tem 11 dígitos. Os 10 primeiros são sequenciais e o último é o dígito verificador, calculado por mod-11 com pesos fixos do DENATRAN. Versão offline, sem dependência:
# renavam.py - implementação pura, offline
import random
PESOS = [3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
def calcula_dv(base: list[int]) -> int:
"""DV = 11 - (soma ponderada % 11). Resultado 10 ou 11 vira 0."""
soma = sum(d * p for d, p in zip(base, PESOS))
dv = 11 - (soma % 11)
return 0 if dv >= 10 else dv
def gera_renavam() -> str:
base = [random.randint(0, 9) for _ in range(10)]
return "".join(map(str, base + [calcula_dv(base)]))
def valida_renavam(renavam: str) -> bool:
d = [int(c) for c in renavam if c.isdigit()]
if len(d) != 11 or len(set(d)) == 1:
return False
return calcula_dv(d[:10]) == d[10]Alguns manuais descrevem a mesma conta como (soma * 10) % 11 com resultado 10 virando 0. Os dois jeitos dão o mesmo dígito para todas as somas, e o código do FakeForge usa essa segunda forma. Vantagens do local: zero deps e offline. Limitação: só RENAVAM, sem placa nem outros documentos do veículo.
Como testar RENAVAM em pytest?
Teste unitário que garante que o gerador só produz dígito verificador correto e que o validador rejeita número adulterado.
# tests/test_renavam.py
import pytest
from renavam import gera_renavam, valida_renavam
def test_renavam_gerado_tem_11_digitos():
assert len(gera_renavam()) == 11
@pytest.mark.parametrize("_", range(500))
def test_renavam_gerado_passa_no_validador(_):
assert valida_renavam(gera_renavam())
def test_validador_rejeita_dv_errado():
renavam = gera_renavam()
dv_errado = str((int(renavam[-1]) + 1) % 10)
assert not valida_renavam(renavam[:-1] + dv_errado)
def test_validador_rejeita_sequencia_repetida():
assert not valida_renavam("11111111111")
# Com o SDK, em tests/conftest.py
@pytest.fixture(scope="session")
def renavams_sdk():
from fakeforge import FakeForge
return FakeForge().renavam(50, formatted=False)
def test_renavams_do_sdk_sao_validos(renavams_sdk):
assert all(valida_renavam(r) for r in renavams_sdk)Como popular um banco Django com RENAVAM?
# frota/management/commands/seed_veiculos.py
from django.core.management.base import BaseCommand
from fakeforge import FakeForge
from frota.models import Veiculo
class Command(BaseCommand):
help = "Cria veículos de teste com RENAVAM e placa válidos"
def add_arguments(self, parser):
parser.add_argument("--qtd", type=int, default=500)
def handle(self, *args, **options):
qtd = options["qtd"]
ff = FakeForge()
renavams = ff.renavam(qtd, formatted=False)
placas = ff.placa(qtd)
Veiculo.objects.bulk_create(
[Veiculo(renavam=r, placa=p) for r, p in zip(renavams, placas)],
ignore_conflicts=True, # renavam unique: colisão é rara, não quebra o seed
)
self.stdout.write(f"{qtd} veículos criados")SDK ou algoritmo local: qual escolher?
| Cenário | SDK fakeforge-br | Algoritmo local |
|---|---|---|
| Só RENAVAM simples | Sim | Sim |
| RENAVAM + placa Mercosul | Sim | Não (só RENAVAM) |
| Preset com pessoa correlacionada | Sim | Não |
| 100% offline | Não | Sim |
| Zero deps runtime | Sim | Sim |
| Bulk 10k+ | 1 chamada | Loop |
| Custo | Free 50/dia | R$0 |
Precisa de mais de 50 chamadas por dia ou de 10 mil itens por request? Veja os planos.
Perguntas frequentes
Como gerar RENAVAM válido em Python?+
Instale pip install fakeforge-br e chame FakeForge().renavam(n). Sem SDK, sorteie 10 dígitos, multiplique pelos pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2, some os produtos e calcule o dígito verificador como 11 menos o resto da divisão por 11, usando 0 quando o resultado for 10 ou 11.
Quantos dígitos tem o RENAVAM?+
11 dígitos: 10 dígitos de base mais 1 dígito verificador. Registros antigos tinham 9 dígitos, mas o padrão atual do DENATRAN (hoje Senatran) usa 11, e é o que o gerador e o validador deste guia seguem.
Como validar um RENAVAM em Python?+
Remova tudo que não for dígito, confira que sobraram 11 números e que eles não são todos iguais, recalcule o dígito verificador com os pesos 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 e compare com o último dígito. A função valida_renavam desta página faz isso em 6 linhas.
O RENAVAM gerado pertence a um veículo real?+
Não. O número passa na conta do dígito verificador, mas é sorteado e não está vinculado a nenhum veículo no sistema do DENATRAN. Serve para testar formulários, validações e cadastros em ambiente de teste, nunca para consulta ou fraude.
O SDK fakeforge-br gera RENAVAM?+
Sim. O método ff.renavam(n) retorna lista de RENAVAMs válidos, formatados em grupos de 4 por padrão. Use formatted=False para receber só os 11 dígitos. O endpoint HTTP chama o mesmo gerador que roda no site.