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álidos

Free 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) == 10

Comparação: qual escolher

CenárioSDK fakeforge-brAlgoritmo 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
CustoFree 50/diaR$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.

Próximos passos