Python · SDK + algoritmo
Gerador de Telefone em Python
Pra gerar telefone brasileiro válido em Python, instale pip install fakeforge-br e chame FakeForge().phone(n). Cada número segue o padrão da ANATEL: DDD de dois dígitos (um dos 67 válidos) mais o 9 do celular mais 8 dígitos, totalizando 11 dígitos no celular e 10 no fixo. Sem SDK, um algoritmo local replica a mesma lógica offline.
TL;DR
pip install fakeforge-br
from fakeforge import FakeForge
celulares = FakeForge().phone(100) # 100 celulares BR válidosFree 50 chamadas/dia sem cadastro. Zero deps runtime além do install.
Rota 1: SDK oficial fakeforge-br
A mais rápida. .phone(n) gera celular, .landline(n) gera fixo.
# Instalação
pip install fakeforge-br
from fakeforge import FakeForge
ff = FakeForge()
# 1 celular formatado
celular = ff.phone(1)[0]
print(celular) # "(11) 98765-4321"
# 1000 celulares sem formatação
celulares = ff.phone(1000, formatted=False)
# Telefone fixo (10 dígitos, sem o 9)
fixos = ff.landline(100)
# Preset customer (telefone + nome + email correlacionados)
pessoas = ff.preset("customer", 10)
for p in pessoas:
print(p["telefone"], p["nome"])Vantagens: correlação com outros campos (nome, endereço, DDD coerente), presets fintech/ecom, bulk até 10k por chamada. Requer internet (chama endpoint HTTP).
Rota 2: algoritmo local (offline)
Se você não quer dep externa ou precisa gerar telefone 100% offline, o padrão ANATEL é simples de replicar:
# gerador_telefone.py - implementação pura, offline
import random
DDDS_VALIDOS = [
11, 12, 13, 14, 15, 16, 17, 18, 19,
21, 22, 24, 27, 28,
31, 32, 33, 34, 35, 37, 38,
41, 42, 43, 44, 45, 46, 47, 48, 49,
51, 53, 54, 55,
61, 62, 63, 64, 65, 66, 67, 68, 69,
71, 73, 74, 75, 77, 79,
81, 82, 83, 84, 85, 86, 87, 88, 89,
91, 92, 93, 94, 95, 96, 97, 98, 99,
]
def gerar_celular(formatado: bool = True) -> str:
"""Gera celular BR: DDD + 9 + 8 dígitos (11 no total)."""
ddd = random.choice(DDDS_VALIDOS)
numero = "".join(str(random.randint(0, 9)) for _ in range(8))
if formatado:
return f"({ddd}) 9{numero[:4]}-{numero[4:]}"
return f"{ddd}9{numero}"
def gerar_fixo(formatado: bool = True) -> str:
"""Gera fixo BR: DDD + 8 dígitos (10 no total). Primeiro dígito 2-5."""
ddd = random.choice(DDDS_VALIDOS)
primeiro = random.randint(2, 5)
resto = "".join(str(random.randint(0, 9)) for _ in range(7))
numero = f"{primeiro}{resto}"
if formatado:
return f"({ddd}) {numero[:4]}-{numero[4:]}"
return f"{ddd}{numero}"
def validar_telefone(numero: str) -> bool:
"""Valida se o número segue o padrão ANATEL (DDD válido + tamanho certo)."""
d = [c for c in numero if c.isdigit()]
if len(d) not in (10, 11):
return False
ddd = int("".join(d[:2]))
if ddd not in DDDS_VALIDOS:
return False
if len(d) == 11:
return d[2] == "9"
return d[2] in ("2", "3", "4", "5")Vantagens: zero deps, offline, controle total. Limitação: só telefone, sem correlação com outros campos.
Uso em testes de SMS (Twilio/Zenvia)
Testar envio de SMS sem disparar mensagem real: gera celular válido, faz mock do client de SMS e confere se o payload foi montado certo.
# tests/conftest.py
import pytest
from fakeforge import FakeForge
@pytest.fixture(scope="session")
def ff():
return FakeForge()
@pytest.fixture
def celulares(ff):
return ff.phone(50)
# tests/test_sms_signup.py
def test_signup_envia_sms_para_celular_valido(client, celulares, monkeypatch):
enviados = []
monkeypatch.setattr(
"myapp.sms.twilio_client.messages.create",
lambda **kwargs: enviados.append(kwargs) or {"sid": "SM_fake"},
)
for celular in celulares[:10]:
response = client.post("/signup", json={"telefone": celular, "email": "test@test.com"})
assert response.status_code == 201
assert len(enviados) == 10Comparação: qual escolher
| Cenário | SDK fakeforge-br | Algoritmo local |
|---|---|---|
| Só telefone simples | ✅ | ✅ |
| Pessoa correlacionada (nome+telefone+email) | ✅ | ❌ |
| Celular e fixo no mesmo DDD | ✅ | ⚠️ repete manual |
| 100% offline | ❌ | ✅ |
| Zero deps runtime | ✅ | ✅ |
| Bulk 10k+ | ✅ 1 chamada | ⚠️ loop |
| Custo | Free 50/dia | R$0 |
Perguntas frequentes
Como gerar telefone brasileiro válido em Python?+
Instale pip install fakeforge-br e chame FakeForge().phone(n). Cada número segue o padrão ANATEL: DDD válido (um dos 67) + 9 (celular) + 8 dígitos. Alternativa offline: algoritmo local escolhe DDD válido e monta o número sem depender de rede.
Qual a diferença entre celular e fixo gerado em Python?+
Celular tem 11 dígitos e sempre inclui o 9 depois do DDD. Fixo tem 10 dígitos e o primeiro dígito após o DDD vai de 2 a 5. Use .phone(n) para celular e .landline(n) para fixo.
Dá pra gerar telefone em Python sem instalar SDK nenhum?+
Sim. O algoritmo local (função gerar_celular/gerar_fixo) roda 100% offline em Python puro, sem nenhuma dependência externa, escolhendo um DDD válido da lista dos 67 códigos ANATEL.
Quantos DDDs válidos existem no Brasil?+
67. Vão de 11 a 99, mas com lacunas (não existem 20, 23, 25, 26, 29, 36, 39, 40, 50, 52, 56-60, 70, 72, 76, 78, 80 e 90). O algoritmo local já usa a lista completa e correta.
O número gerado pode disparar SMS de verdade?+
Não. Os números são fictícios e não correspondem a nenhuma linha ativa. São seguros pra testar formulários, validação de máscara e integração com APIs de SMS sem risco de enviar mensagem real.