Python · SDK + algoritmo

Gerador de CNPJ em Python

Duas rotas: SDK oficial fakeforge-br (cobre CNPJ numérico + alfanumérico 2026) ou algoritmo mod-11 local em Python puro. Snippets pra pytest, Django, Flask e FastAPI. Grátis 50/dia sem cadastro.

TL;DR

pip install fakeforge-br

from fakeforge import FakeForge
ff = FakeForge()

cnpjs = ff.cnpj(100)              # 100 CNPJs numéricos válidos
cnpjs_alfa = ff.cnpj_alfa(50)     # 50 CNPJs alfanuméricos 2026

CNPJ alfanumérico 2026 (importante)

A IN RFB 2.229 obriga sistemas a aceitar CNPJ com letras a partir de 1º de julho de 2026. Se seu sistema Python valida CNPJ hoje via regex ou biblioteca antiga, provavelmente vai quebrar. Testa desde já com os novos formatos:

from fakeforge import FakeForge

ff = FakeForge()

# Gera 20 CNPJs no novo formato alfanumérico
cnpjs_alfa = ff.cnpj_alfa(20, formatted=True)
for c in cnpjs_alfa:
    print(c)
    # 12.ABC.678/0001-90
    # AB.234.567/0001-XY
    # ...

# Usa pra testar seu validador
from myapp.validators import validar_cnpj
resultados = [validar_cnpj(c) for c in cnpjs_alfa]
assert all(resultados), "Seu validador quebra no formato 2026!"

Algoritmo mod-11 local (numérico)

# gerador_cnpj.py - Python puro, offline
import random

def gerar_cnpj(formatado: bool = True) -> str:
    """Gera CNPJ válido pelo algoritmo mod-11 da Receita."""
    # 8 dígitos base + /0001 (matriz)
    n = [random.randint(0, 9) for _ in range(8)] + [0, 0, 0, 1]

    pesos1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
    pesos2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]

    s1 = sum(a * b for a, b in zip(n, pesos1))
    d1 = (s1 % 11)
    d1 = 0 if d1 < 2 else 11 - d1
    n.append(d1)

    s2 = sum(a * b for a, b in zip(n, pesos2))
    d2 = (s2 % 11)
    d2 = 0 if d2 < 2 else 11 - d2
    n.append(d2)

    if formatado:
        return f"{n[0]}{n[1]}.{n[2]}{n[3]}{n[4]}.{n[5]}{n[6]}{n[7]}/{n[8]}{n[9]}{n[10]}{n[11]}-{n[12]}{n[13]}"
    return "".join(str(d) for d in n)

Uso em Django (empresa model)

# myapp/management/commands/seed_empresas.py
from django.core.management.base import BaseCommand
from fakeforge import FakeForge
from myapp.models import Empresa

class Command(BaseCommand):
    def handle(self, *args, **options):
        ff = FakeForge()
        cnpjs = ff.cnpj(500)  # 500 empresas com CNPJ válido

        Empresa.objects.bulk_create([
            Empresa(razao_social=f"Empresa {i}", cnpj=cnpj)
            for i, cnpj in enumerate(cnpjs)
        ])

        # E 100 empresas com CNPJ alfanumérico 2026
        cnpjs_alfa = ff.cnpj_alfa(100)
        Empresa.objects.bulk_create([
            Empresa(razao_social=f"Empresa Alfa {i}", cnpj=cnpj)
            for i, cnpj in enumerate(cnpjs_alfa)
        ])

Uso em pytest

# tests/test_cnpj_validator.py
import pytest
from fakeforge import FakeForge
from myapp.validators import validar_cnpj

@pytest.fixture(scope="session")
def ff():
    return FakeForge()

@pytest.mark.parametrize("indice", range(20))
def test_valida_cnpj_numerico(ff, indice):
    cnpj = ff.cnpj(1)[0]
    assert validar_cnpj(cnpj), f"Falhou pro CNPJ {cnpj}"

@pytest.mark.parametrize("indice", range(20))
def test_valida_cnpj_alfanumerico_2026(ff, indice):
    """IN RFB 2.229 vigência 01/07/2026."""
    cnpj = ff.cnpj_alfa(1)[0]
    assert validar_cnpj(cnpj), f"Validador NÃO aceita formato 2026: {cnpj}"

Próximos passos