Python · SDK + algoritmo
Gerador de Empresa em Python
Pra gerar empresa fictícia completa em Python (CNPJ, razão social, endereço e telefone correlacionados), instale pip install fakeforge-br e chame FakeForge().company(n). O CNPJ usa o algoritmo mod-11 da Receita com sufixo /0001 (matriz), e o endereço acompanha um DDD e estado coerentes.
TL;DR
pip install fakeforge-br
from fakeforge import FakeForge
empresas = FakeForge().company(50) # 50 empresas com CNPJ + razão social + endereçoRota 1: SDK oficial fakeforge-br
A mais rápida. .company(n) retorna objeto completo por empresa.
from fakeforge import FakeForge
ff = FakeForge()
# 50 empresas fictícias completas
empresas = ff.company(50)
for e in empresas:
print(e["razao_social"], e["cnpj"], e["endereco"]["estado"])
# Preset company (mesma coisa, via schema builder)
empresas_preset = ff.preset("company", 100)
# Só o CNPJ, sem os outros campos
cnpjs = ff.cnpj(1000)Vantagens: CNPJ, razão social, endereço e telefone já correlacionados, presets B2B, bulk até 10k por chamada. Requer internet.
Rota 2: algoritmo local (offline)
O CNPJ segue o mesmo mod-11 da Receita. Pra correlacionar endereço, um mapa simples de DDD para estado já resolve a maioria dos casos de teste:
# gerador_empresa.py - implementação pura, offline
import random
SUFIXOS = ["LTDA", "S.A.", "ME", "EIRELI"]
DDD_PARA_ESTADO = {
11: "SP", 21: "RJ", 31: "MG", 41: "PR",
51: "RS", 61: "DF", 71: "BA", 81: "PE", 91: "PA",
}
def gerar_cnpj(formatado: bool = True) -> str:
"""Gera CNPJ válido pelo algoritmo mod-11 da Receita, sufixo /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 = 0 if (s1 % 11) < 2 else 11 - (s1 % 11)
n.append(d1)
s2 = sum(a * b for a, b in zip(n, pesos2))
d2 = 0 if (s2 % 11) < 2 else 11 - (s2 % 11)
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)
def gerar_empresa() -> dict:
"""Gera empresa fictícia com CNPJ, razão social e endereço correlacionados."""
ddd = random.choice(list(DDD_PARA_ESTADO.keys()))
estado = DDD_PARA_ESTADO[ddd]
return {
"razao_social": f"Comercial {random.randint(100, 999)} {random.choice(SUFIXOS)}",
"cnpj": gerar_cnpj(),
"estado": estado,
"telefone": f"({ddd}) 9{random.randint(1000, 9999)}-{random.randint(1000, 9999)}",
}Vantagens: zero deps, offline, controle total sobre a correlação. Limitação: endereço simplificado a um mapa fixo de DDDs, sem nome fantasia nem CNPJ alfanumérico 2026.
Uso em Django (seed de empresas)
# 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()
empresas = ff.company(500) # 500 empresas correlacionadas
Empresa.objects.bulk_create([
Empresa(
razao_social=e["razao_social"],
cnpj=e["cnpj"],
endereco=e["endereco"]["logradouro"],
estado=e["endereco"]["estado"],
telefone=e["telefone"],
)
for e in empresas
])
self.stdout.write(f"{len(empresas)} empresas seeded")Comparação: qual escolher
| Cenário | SDK fakeforge-br | Algoritmo local |
|---|---|---|
| Só CNPJ simples | ✅ | ✅ |
| Empresa completa correlacionada | ✅ | ⚠️ simplificado |
| Endereço com CEP coerente | ✅ | ❌ |
| 100% offline | ❌ | ✅ |
| Bulk 10k+ | ✅ 1 chamada | ⚠️ loop |
| Custo | Free 50/dia | R$0 |
Perguntas frequentes
O CNPJ da empresa gerada em Python é válido?+
Tem dígitos verificadores válidos pelo algoritmo mod-11 (passa em qualquer validação de formato), mas não está registrado na Receita Federal. A empresa é fictícia.
Dá pra usar esse CNPJ pra testar emissão de NF-e em homologação?+
Sim, é um dos usos mais comuns. Ambientes de homologação de NF-e aceitam CNPJ com formato válido mesmo sem CNPJ real, já que não consultam a Receita em produção.
O endereço da empresa é coerente com o CNPJ?+
No SDK sim, o endereço é gerado junto com CNPJ, razão social e telefone no mesmo objeto. No algoritmo local, a correlação usa um mapa simplificado de DDD para estado.
Dá pra popular banco Django com empresas fictícias em lote?+
Sim. Use ff.company(n) num management command com bulk_create, como no exemplo desta página. Suporta até 10.000 empresas por chamada no SDK.