Python · SDK + DENATRAN
Gerador de CNH em Python
SDK fakeforge-br gera CNH com dígitos verificadores mod-11 do DENATRAN. Snippets pra pytest, Django, FastAPI. Grátis 50/dia.
pip install fakeforge-br
from fakeforge import FakeForge
cnhs = FakeForge().cnh(100)SDK oficial
from fakeforge import FakeForge
ff = FakeForge()
# 100 CNHs válidas
cnhs = ff.cnh(100)
# Todos passam mod-11 do DENATRAN
for c in cnhs[:5]:
print(c)
# 12345678900
# 98765432100
# ...Algoritmo DENATRAN mod-11 local
# gerador_cnh.py - Python puro
import random
def gerar_cnh() -> str:
"""Gera número CNH válido pelo algoritmo mod-11 DENATRAN."""
n = [random.randint(0, 9) for _ in range(9)]
# Primeiro dígito verificador (pesos 9..1)
s1 = sum(a * b for a, b in zip(n, range(9, 0, -1)))
d1 = s1 % 11
if d1 >= 10:
d1 = 0
dsc = 2
else:
dsc = 0
# Segundo dígito verificador (pesos 1..9)
s2 = sum(a * b for a, b in zip(n, range(1, 10)))
d2 = s2 % 11
d2 = 0 if d2 >= 10 else d2
d2 = max(0, d2 - dsc)
return "".join(str(x) for x in n) + str(d1) + str(d2)Uso em Django (motorista model)
# myapp/management/commands/seed_motoristas.py
from django.core.management.base import BaseCommand
from fakeforge import FakeForge
from myapp.models import Motorista
class Command(BaseCommand):
def handle(self, *args, **options):
ff = FakeForge()
cnhs = ff.cnh(1000)
pessoas = ff.preset("customer", 1000)
Motorista.objects.bulk_create([
Motorista(
cpf=p["cpf"],
nome=p["nome"],
cnh=cnh,
categoria=random.choice(["A", "B", "AB", "C", "D"]),
)
for p, cnh in zip(pessoas, cnhs)
])Uso em pytest
# tests/test_cnh_validator.py
import pytest
from fakeforge import FakeForge
@pytest.fixture(scope="session")
def ff():
return FakeForge()
@pytest.fixture(scope="session")
def cnhs(ff):
return ff.cnh(100)
class TestCnhValidator:
@pytest.mark.parametrize("indice", range(20))
def test_valida_cnh_denatran(self, cnhs, indice):
from myapp.validators import validar_cnh
assert validar_cnh(cnhs[indice])