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 numero de celular na internet nao e uma string qualquer de digitos — e um identificador estruturado definido pela Recomendacao E.164 do ITU-T. O padrao diz: um codigo de pais (1 a 3 digitos) seguido pelo numero nacional, totalizando no maximo 15 digitos, escrito com um + na frente. Entao +5511999998888 e um celular brasileiro em E.164 canonico. Toda requisicao para WhatsApp, Telegram, Twilio ou AWS SNS espera entrada E.164. Este validador escolhe um pais, remove formatacao, aplica as regras especificas e reporta se o numero 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 digitos (codigo de pais atribuido pelo ITU) e a parte nacional vai ate 12 digitos. Sem espacos, parenteses ou tracos — isso e so formatacao de exibicao. Comprimento maximo total: 15 digitos 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 digitos + celular de 9 digitos comecando com o 9 literal. O 9 na frente virou obrigatorio em 2014 em todos os estados. Total: 13 digitos depois do +. Exemplo: +5511999998888.
  • EUA / Canada (+1) — North American Numbering Plan (NANP): area code de 3 (NPA) + exchange de 3 (NXX) + 4 digitos. Nao distingue movel de fixo no formato. Exemplo: +14155551234.
  • Reino Unido (+44) — celular sempre comeca com 7, mais 9 digitos. Exemplo: +447911123456.
  • Alemanha (+49) — prefixos de celular 15x, 16x, 17x + 7-8 digitos.
  • Japao (+81) — prefixos de celular 70, 80, 90 + 8 digitos.
  • China (+86) — prefixos de celular 13x, 14x, 15x, 17x, 18x, 19x + 8 digitos.
  • India (+91) — 10 digitos, primeiro sempre 6-9 para movel.
  • Mexico (+52) — 10 digitos. O 1 prefixado antes de celular foi removido em 2019.
  • Argentina (+54) — prefixo 9 + area + numero para celular (em chamadas internacionais e WhatsApp): +5491112345678.

libphonenumber: a unica biblioteca que voce 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 numeracao do mundo, atualizada com frequencia, 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-padrao: escrever seu proprio regex por pais. Planos de numeracao mudam (Mexico tirou o 1 em 2019, Brasil pos o 9 em 2014, El Salvador adicionou digito em 2017) e voce nao vai pegar essas mudancas na mao. 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 deteccao trivial.
  • Fixo — geralmente mais curto ou com prefixo nao-movel; nao recebe SMS de forma confiavel.
  • 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 valido para contas.
  • VoIP (DID) — atribuidos por providers como Twilio, Vonage, Plivo. Costumam receber SMS mas sao flagrados como risco por antifraude.

Em forms de cadastro que travam conta atras de verificacao SMS, os tipos MOBILE e FIXED_LINE_OR_MOBILE de libphonenumber.getType() costumam ser aceitos; VOIP, TOLL_FREE e PREMIUM_RATE sao rejeitados.

O contexto brasileiro: WhatsApp como identidade

No Brasil, o numero de celular e, na pratica, uma identidade nacional — a penetracao do WhatsApp passa de 95% dos usuarios de internet, e e-commerce, fintechs e servicos governamentais autenticam por WhatsApp ou SMS para esse numero. A WhatsApp Business API exige um numero real, proprio e valido em E.164. Falhar na validacao 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 numero.

Algoritmo de validacao em cinco passos

  1. Remova nao-digitos — mantenha so 0-9 e um + opcional na frente.
  2. Detecte ou assuma codigo de pais — pelo + na frente ou por locale padrao.
  3. Aplique o teto E.164 — maximo 15 digitos depois do +.
  4. Bata com o padrao 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, entao os resultados batem entre stacks.

Qual o comprimento maximo de um numero E.164? 15 digitos depois do +. O codigo de pais tem 1-3 digitos, sobrando ate 12 para o numero nacional.

Numeros 0800 sao validos? Sim, sintaticamente — mas sao inbound only e nao recebem SMS nem WhatsApp. Rejeite em qualquer fluxo de cadastro que precise de verificacao por celular.

Por que meu numero brasileiro aparece invalido? Provavelmente esta sem o 9 na frente, obrigatorio desde 2014. +551199998888 e obsoleto; o correto e +5511999998888 com 9 digitos depois do DDD.

Devo guardar o numero em E.164 ou local? Sempre em E.164 (+5511999998888) e formatar para exibicao com libphonenumber.format(). O formato local depende de locale e quebra na hora que o usuario viaja ou muda de pais.

Ferramentas Relacionadas