1001Ferramentas
📱Validadores

Validador de Celular por País

Valida número de celular para o país escolhido (BR, EUA, PT, ES, AR, MX). Formato: country code + número, com regras específicas por país.

Validar celular por pais: E.164, libphonenumber e as regras locais

Um número de celular na internet não e uma string qualquer de dígitos — e um identificador estruturado definido pela Recomendação E.164 do ITU-T. O padrão diz: um código de pais (1 a 3 dígitos) seguido pelo número nacional, totalizando no máximo 15 dígitos, escrito com um + na frente. Então +5511999998888 e um celular brasileiro em E.164 canônico. Toda requisição para WhatsApp, Telegram, Twilio ou AWS SNS espera entrada E.164. Este validador escolhe um pais, remove formatacao, aplica as regras específicas e reporta se o número esta bem-formado e provavelmente e celular (vs fixo, VoIP ou 0800).

E.164 em um paragrafo

Formato: +CC NNNNNNNNNN, onde CC tem 1-3 dígitos (código de pais atribuído pelo ITU) e a parte nacional vai até 12 dígitos. Sem espaços, parenteses ou tracos — isso e so formatacao de exibição. Comprimento máximo total: 15 dígitos depois do +. O + em si e um placeholder para o prefixo de acesso internacional que varia por pais (00 na Europa, 011 nos EUA, 00 no Brasil).

Regras de celular pais a pais

  • Brasil (+55) — DDD de 2 dígitos + celular de 9 dígitos começando com o 9 literal. O 9 na frente virou obrigatório em 2014 em todos os estados. Total: 13 dígitos depois do +. Exemplo: +5511999998888.
  • EUA / Canada (+1) — North American Numbering Plan (NANP): área code de 3 (NPA) + exchange de 3 (NXX) + 4 dígitos. Não distingue movel de fixo no formato. Exemplo: +14155551234.
  • Reino Unido (+44) — celular sempre começa com 7, mais 9 dígitos. Exemplo: +447911123456.
  • Alemanha (+49) — prefixos de celular 15x, 16x, 17x + 7-8 dígitos.
  • Japão (+81) — prefixos de celular 70, 80, 90 + 8 dígitos.
  • China (+86) — prefixos de celular 13x, 14x, 15x, 17x, 18x, 19x + 8 dígitos.
  • Índia (+91) — 10 dígitos, primeiro sempre 6-9 para movel.
  • Mexico (+52) — 10 dígitos. O 1 prefixado antes de celular foi removido em 2019.
  • Argentina (+54) — prefixo 9 + área + número para celular (em chamadas internacionais e WhatsApp): +5491112345678.

libphonenumber: a única biblioteca que você deveria usar

A libphonenumber foi liberada pelo Google em 2010 para alimentar o app de contatos do Android. Tem uma tabela de metadados de todos os planos de numeração do mundo, atualizada com frequência, com regex para faixas validas de celular, fixo, 0800 e premium. Existem ports para cada linguagem importante: libphonenumber-js (JavaScript, ~140 KB no navegador), libphonenumber-java, phonenumbers (Python), libphonenumber-android.

import { parsePhoneNumber } from 'libphonenumber-js'
const n = parsePhoneNumber('+5511999998888')
n.isValid()           // true
n.getType()           // 'MOBILE'
n.country             // 'BR'
n.format('E.164')     // '+5511999998888'
n.format('INTERNATIONAL') // '+55 11 99999 8888'

O anti-padrão: escrever seu próprio regex por pais. Planos de numeração mudam (Mexico tirou o 1 em 2019, Brasil pós o 9 em 2014, El Salvador adicionou dígito em 2017) e você não vai pegar essas mudanças na mão. Use libphonenumber e deixe o time de dados do Google fazer o trabalho.

Celular vs fixo vs 0800 vs VoIP

  • Celular — caso de uso original para SMS, WhatsApp, entrega de OTP. No Brasil, o 9 na frente torna a detecção trivial.
  • Fixo — geralmente mais curto ou com prefixo não-movel; não recebe SMS de forma confiável.
  • Toll-free / 0800 — Brasil 0800, EUA 1-800/888/877/866. Inbound only; sem SMS.
  • Premium — Brasil 0900, EUA 1-900. O chamador paga; raramente válido para contas.
  • VoIP (DID) — atribuídos por providers como Twilio, Vonage, Plivo. Costumam receber SMS mas são flagrados como risco por antifraude.

Em forms de cadastro que travam conta atrás de verificação SMS, os tipos MOBILE e FIXED_LINE_OR_MOBILE de libphonenumber.getType() costumam ser aceitos; VOIP, TOLL_FREE e PREMIUM_RATE são rejeitados.

O contexto brasileiro: WhatsApp como identidade

No Brasil, o número de celular e, na pratica, uma identidade nacional — a penetracao do WhatsApp passa de 95% dos usuários de internet, e e-commerce, fintechs e serviços governamentais autenticam por WhatsApp ou SMS para esse número. A WhatsApp Business API exige um número real, próprio e válido em E.164. Falhar na validação do celular significa OTPs no vazio, cadastros abandonados e tickets de suporte irritados. Sempre dispare um OTP de teste depois da checagem de formato antes de confiar no número.

Algoritmo de validação em cinco passos

  1. Remova não-dígitos — mantenha so 0-9 e um + opcional na frente.
  2. Detecte ou assuma código de pais — pelo + na frente ou por locale padrão.
  3. Aplique o teto E.164 — máximo 15 dígitos depois do +.
  4. Bata com o padrão de celular do pais — 9 na frente para BR, 7 para UK, 6-9 para IN, etc.
  5. Rejeite 0800, premium, VoIP se seu caso precisa de celular real.

FAQ

Que biblioteca usar? libphonenumber-js para JavaScript, libphonenumber-java para a JVM, phonenumbers para Python. Compartilham os mesmos metadados, então os resultados batem entre stacks.

Qual o comprimento máximo de um número E.164? 15 dígitos depois do +. O código de pais tem 1-3 dígitos, sobrando até 12 para o número nacional.

Números 0800 são válidos? Sim, sintaticamente — mas são inbound only e não recebem SMS nem WhatsApp. Rejeite em qualquer fluxo de cadastro que precise de verificação por celular.

Por que meu número brasileiro aparece inválido? Provavelmente esta sem o 9 na frente, obrigatório desde 2014. +551199998888 e obsoleto; o correto e +5511999998888 com 9 dígitos depois do DDD.

Devo guardar o número em E.164 ou local? Sempre em E.164 (+5511999998888) e formatar para exibição com libphonenumber.format(). O formato local depende de locale e quebra na hora que o usuário viaja ou muda de pais.

Ferramentas Relacionadas