Como funciona um número português aleatório na prática
Se precisas de gerar números de Portugal aleatórios para testes, protótipos ou validação de formulários, o processo é simples mas cheio de armadilhas que só aparecem quando algo falha em produção. Vou explicar como fazer, o que acontece de errado e o que aprendi à custa de bugs.
numero de portugal aleatorio: estrutura e geração
A primeira coisa que muita gente não percebe é que Portugal usa o código +351 e todos os números têm 9 dígitos, mas a distinção entre fixos e móveis é mais importante do que parece. Números móveis começam por 9 (91, 92, 93, 96) e fixos por 2 (21, 22, 23, 25, 26, 27, 28). Se gerares um número totalmente aleatório sem respeitar esses prefixos, vais ter resultados que parecem válidos mas que ninguém usa no mundo real. O formato padrão é +351 9XX XXX XXX para telemóveis ou +351 2XXX XXX XX para fixos. A geração técnica em si é trivial: escolhe um prefixo válido, preenche os restantes dígitos com números aleatórios, aplica o formato. Em Python ficaria algo assim:
import random\nprefixes = ["91", "92", "93", "96"]\nprefix = random.choice(prefixes)\nsuffix = "".join([str(random.randint(0,9)) for _ in range(7)])\nprint(f"+351 {prefix} {suffix[:3]} {suffix[3:]}") Isso dá-te um número com formato correto em milissegundos. O problema é outro.
No meu caso, tive um cliente que estava a validar inscrições num formulário e metade dos números gerados aleatoriamente eram rejeitados pelo sistema de destino. A razão? Existia uma lista de números reservados que não aparecia em nenhum documento público mas que operadoras como a NOS e a Vodafone mantinham internamente. Números como 912 000 XXX ou 968 500 XXX são atribuídos a serviços corporativos e não devem ser usados em testes porque causam conflito real se alguém tentar contactá-los. A solução foi criar uma blacklist com os intervalos conhecidos e excluí-los na geração. Não é algo que esteja documentado de forma centralizada mas pesquei a informação de fóruns de operadoras e de relatórios abertos da ANACOM sobre faixas de numeração atribuídas.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Outro detalhe que passa despercebido: o dígito de verificação. Números portugueses não usam algoritmo de tipo Luhn como os cartões de crédito. Isso significa que qualquer sequência de 9 dígitos com prefixo válido é tecnicamente passável num formulário que apenas valida o comprimento. Só quando tentas fazer uma ligação real é que o sistema da operadora rejeita o número. Para testes de software isso raramente é problema mas para integração com gateways de SMS ou chamadas, sim.
Pontos onde isto costuma falhar
Se estiveres a construir um gerador ou a validar números recebidos, aqui estão os problemas mais comuns que vejo aparecerem. A maioria não tem a ver com a matemática mas com suposições sobre como os números são distribuídos. Prefixos inválidos — Gerar um número que começa por 94 ou 95 é um erro frequente. Esses prefixos não existem em Portugal continental. Existem no entanto para a Madeira (291, 292, 293, 295, 298) e para os Açores (291 a 299). Se o teu sistema não trata region Code corretamente, vais gerar números que não funcionam em contexto real.
Formato de apresentação — Um número como +351912345678 é funcionalmente idêntico a 91 234 56 78 mas sistemas diferentes esperam formatos diferentes. Gateways de SMS muitas vezes rejeitam números com espaços ou traços, enquanto UIs de contacto preferem o formato com separadores. O mais seguro é armazenar sempre em formato E.164 (+351XXXXXXXXX) e formatar apenas para exibição. Sobreposição com números reais — Quanto mais números geras, maior a probabilidade de bater num número que pertence a uma pessoa real. Isto é especialmente problemático se o número for usado para enviar SMS ou fazer chamadas de teste. Já vi casos em que geradores automáticos enviavam códigos de confirmação para números aleatórios de terceiros, o que levou a reclamações junto das operadoras. A recomendação prática é usar intervalos reservados para testes quando disponível, como a faixa 910 XXX XXX que é frequentemente associada a serviços de teste.
Limitações óbvias — Este método gera números com formato correto mas não garante que o número esteja ativo, atribuído ou disponível. Para testes de integração real com gateways de comunicação, a única abordagem segura é comprar linhas virtuais ou usar serviços de numbers on demand. Geradores aleatórios servem para validação de input, testes unitários e prototipagem. Não servem para produzir números funcionais com os quais alguém possa contactar. Se o teu objetivo é apenas popular um banco de dados de teste com números portugueses, o gerador simples já basta. Se precisas de números que realmente recebam SMS ou chamadas, tens de recorrer a serviços como Twilio, Telnyx ou soluções similares com numeração portuguesa ativa. A diferença de custo é significativa mas evita o tipo de problema que me custou duas semanas de debugging numa integração de verificação por SMS.
Para downloads ou bibliotecas prontas, a maioria dos programadores portugueses usa pacotes como phonenumbers do Google (a mesma biblioteca por trás do WhatsApp) ou bibliotecas específicas por país em Node.js e Python. Nenhuma delas gera números válidos de produção mas todas respeitam a estrutura correta e podem ser configuradas para excluir faixas reservadas se ajustares os parâmetros adequados.