Free Developer Tool · 240+ Countries

Validate & Format Any Phone Number Instantly

  • No Signup
  • Privacy-First
  • Instant Results
  • JSON API

Check whether an international phone number is valid, identify the country and line type, and convert it to E.164, international, national, or RFC3966 format in a single click.

Structural Validation

Checks length, prefix and line type against the live ITU-T E.164 numbering plan for every country.

Every Format

Outputs E.164, international, national and RFC3966 (tel:) ready for your CRM, SMS API or click-to-call link.

240+ Countries

Coverage for every territory in the ITU country-code list, with deep line-type and carrier hints for the top 30.

Privacy by Design

We don't log the numbers you submit. Validation runs in memory; only anonymous counters are recorded.

What is phone number validation?

Phone number validation is the process of checking whether a string of digits matches the official numbering plan of a country the right total length, an allocated prefix, and a recognized line type (mobile, fixed line, toll-free, premium rate, VoIP, and so on). Validation is purely structural: it answers "could this number exist?", not "does this number ring right now?". That distinction matters for every downstream system that stores, dials, or texts the number.

A validator like the one above runs your input through three layers of checks:

  • Length check. Every country sets a minimum and maximum subscriber-number length. A US number that is 9 digits long can never be valid, no matter what the prefix is.
  • Prefix check. Within that length, only specific leading digits are allocated to live services. The allocator Ofcom in the UK, the FCC and NANPA in the US, PTA in Pakistan, TRAI in India, MCMC in Malaysia publishes which ranges are in use.
  • Line-type classification. A valid number is also categorized: mobile, landline, VoIP, toll-free, premium rate, shared cost, personal numbering, pager, or universal access. Some countries publish per-prefix line-type allocations; others rely on operator-level assignments.

What validation is not: it is not a live check that the number is currently assigned to a subscriber, that the SIM is active, or that the device is reachable. Confirming reachability requires a Home Location Register (HLR) lookup, a silent SMS, or a real call. Structural validation is the right first step before any of those there is no point HLR-pinging a number that the country plan says cannot exist.

How to validate a phone number five steps

  1. Strip formatting. Remove spaces, dashes, parentheses, and dots from the input. Convert any vanity letters (1-800-FLOWERS1-800-3569377) using the standard ITU keypad mapping.
  2. Identify the country. If the input begins with + or 00 followed by a country code, use that. Otherwise pick the country from user context profile setting, IP geolocation, or billing address. This is the "default region" parameter most validators expose.
  3. Trim the country code. If the country code is on the front, remove it so you are working with just the national subscriber portion.
  4. Trim the trunk prefix. Many countries (UK, Pakistan, India, Australia, Japan, Germany) prepend a 0 to national numbers. Remove that leading zero before length-checking, but remember to add it back when displaying the national format.
  5. Compare against the country plan. Check length against the published min/max for the country, match the leading digits against allocated mobile / fixed-line / service ranges, and emit the canonical E.164 plus any human-readable formats your application needs.

Submit a number to the form above and this tool runs all five steps in around 200 milliseconds.

Phone number formats explained

Four formats cover everything every developer, marketer, and operator needs to know.

E.164 the canonical international form

E.164 always begins with a plus sign, followed by the 1- to 3-digit country calling code and the national subscriber number. No spaces, no punctuation. Maximum 15 digits total (including the country code, excluding the +).

+14155552671        US        +1 + 415 + 5552671
+442079460958       UK        +44 + 207 + 9460958
+923001234567       PK        +92 + 300 + 1234567
+819012345678       JP        +81 + 90 + 12345678
+61412345678        AU        +61 + 4 + 12345678

E.164 is the format your database, SMS API, SIP softswitch, and CRM should all store internally. Every other format is a presentation detail you can rebuild from it.

International (ITU-T E.123) human-readable global form

The international display form allows spaces or dashes between country code, area code, and subscriber number: +1 415-555-2671 and +1 (415) 555-2671 are both valid international displays of the same E.164 number. Use this format anywhere a human might dial across borders email signatures, business cards, support emails, billing receipts.

National used inside the destination country

The national form is what you display when both reader and number are in the same country. It includes the country's trunk prefix where applicable: (415) 555-2671 in the US, 0207 946 0958 in the UK, 0300 1234567 in Pakistan, 090-1234-5678 in Japan, 0412 345 678 in Australia.

RFC3966 the tel: URI for click-to-call

RFC3966 is the standardized URI scheme: tel:+14155552671. Placed in an HTML <a href> or scanned from a QR code, it opens the device dialer with the number pre-filled. Always use the E.164 form inside the URI; spaces and punctuation are not permitted. RFC3966 also supports extensions via ;ext= for example, tel:+14155552671;ext=142.

Phone number formats by country

The most-validated countries on this tool, with their dialing code, an example international number, the equivalent national display, and the structural rule.

CountryCodeInternationalNationalLengthNotes
🇺🇸 United States+1+1 415-555-2671(415) 555-267110NANP, no trunk prefix; mobile/landline share ranges (portability).
🇨🇦 Canada+1+1 416-555-0143(416) 555-014310Shares NANP with US, distinguished only by area code.
🇬🇧 United Kingdom+44+44 7700 90012307700 90012310Trunk 0; 07 = mobile, 02/01 = landline, 080 = toll-free.
🇮🇳 India+91+91 98765 43210098765 4321010Mobile starts with 6/7/8/9; landline area codes vary 2–4 digits.
🇵🇰 Pakistan+92+92 300 12345670300-123456710Trunk 0; mobile starts with 3, landlines start with city code.
🇧🇩 Bangladesh+880+880 1712-34567801712-34567810Mobile prefix 13–19; landline city codes vary.
🇦🇺 Australia+61+61 4 1234 56780412 345 6789Trunk 0; 4 = mobile, 2/3/7/8 = landline by region.
🇳🇿 New Zealand+64+64 21 123 4567021 123 45678–10Trunk 0; mobile 02x, landline by region.
🇯🇵 Japan+81+81 90 1234 5678090-1234-56789–10Trunk 0; mobile 070/080/090, IP-phone 050.
🇸🇬 Singapore+65+65 9123 45679123 45678No trunk prefix; mobile 8/9, landline 6, VoIP 3.
🇲🇾 Malaysia+60+60 12-345 6789012-345 67899–10Trunk 0; mobile 01x, landline by state.
🇮🇩 Indonesia+62+62 812-3456-78900812-3456-78909–12Trunk 0; mobile 8xx, landline by city.
🇵🇭 Philippines+63+63 917 123 45670917 123 456710–11Trunk 0; mobile starts with 9, NCR landline 02.
🇩🇪 Germany+49+49 30 12345678030 123456789–12Trunk 0; mobile 015/016/017, variable landline length.
🇫🇷 France+33+33 6 12 34 56 7806 12 34 56 789Trunk 0; mobile 6/7, landline 1–5 by region.
🇮🇹 Italy+39+39 333 1234567333 12345679–11No trunk prefix; mobile starts with 3, landline starts with 0.
🇪🇸 Spain+34+34 612 345 678612 345 6789No trunk prefix; mobile 6/7, landline 8/9.
🇵🇱 Poland+48+48 512 345 678512 345 6789No trunk prefix; mobile blocks listed by UKE.
🇧🇷 Brazil+55+55 11 91234-5678(11) 91234-567810–11Mobile is 11 digits with leading 9; landline 10 digits.
🇸🇦 Saudi Arabia+966+966 50 123 4567050 123 45679Trunk 0; mobile 5x, landline by region.
🇦🇪 UAE+971+971 50 123 4567050 123 45679Trunk 0; mobile 50/52/54/55/56/58.
🇹🇷 Turkey+90+90 532 123 45 670532 123 45 6710Trunk 0; mobile 50–56, landline by province.
🇿🇦 South Africa+27+27 82 123 4567082 123 45679Trunk 0; mobile 6/7/8, landline by province.
🇳🇬 Nigeria+234+234 803 123 45670803 123 456710Trunk 0; mobile 7/8/9, NCC publishes operator blocks.

Need a country not listed? The validator covers every territory in the ITU E.164 country-code list (240+). Coverage depth (line-type, area-code, carrier hints) is highest for the countries above.

Phone number validation in code

A common starting point for developers is a regex like ^\+?[1-9]\d{1,14}$. This passes most E.164 inputs and is a useful client-side gate but it is not a real validator. It accepts impossible country codes (+999999999999999), accepts NANP test numbers like +15555555555, rejects valid short codes, and tells you nothing about line type. Use regex to reject obvious garbage on the client; use a numbering-plan library or this tool's API for real validation before persistence or SMS.

JavaScript libphonenumber-js

import { parsePhoneNumberFromString } from 'libphonenumber-js'

const phone = parsePhoneNumberFromString('+14155552671')
phone.isValid()              // true
phone.getType()              // 'FIXED_LINE_OR_MOBILE'
phone.formatInternational()  // '+1 415 555 2671'
phone.formatNational()       // '(415) 555-2671'
phone.getURI()               // 'tel:+14155552671'

Python phonenumbers

import phonenumbers
from phonenumbers import PhoneNumberFormat

p = phonenumbers.parse('+14155552671', None)
phonenumbers.is_valid_number(p)                          # True
phonenumbers.number_type(p)                              # 1 (mobile / fixed)
phonenumbers.format_number(p, PhoneNumberFormat.E164)    # '+14155552671'
phonenumbers.format_number(p, PhoneNumberFormat.RFC3966) # 'tel:+1-415-555-2671'

PHP giggsey/libphonenumber-for-php

use libphonenumber\PhoneNumberUtil;
use libphonenumber\PhoneNumberFormat;

$util = PhoneNumberUtil::getInstance();
$proto = $util->parse('+14155552671', 'US');
$util->isValidNumber($proto);                            // true
$util->getNumberType($proto);                            // FIXED_LINE | MOBILE
$util->format($proto, PhoneNumberFormat::E164);          // '+14155552671'

Java libphonenumber

PhoneNumberUtil util = PhoneNumberUtil.getInstance();
Phonenumber.PhoneNumber p = util.parse("+14155552671", "US");
util.isValidNumber(p);                                            // true
util.format(p, PhoneNumberUtil.PhoneNumberFormat.E164);           // "+14155552671"

HTTP this tool's API

curl -X POST https://www.whoseno.com/tools/phone-number-validator/api.php \
  -H 'Referer: https://www.whoseno.com/tools/phone-number-validator/' \
  -d 'number=%2B14155552671&default_region=US'

// { "success": true, "valid": true, "country": { "iso2": "US", "name": "United States",
//   "calling_code": "1", "flag_emoji": "🇺🇸" }, "type": "FIXED_LINE",
//   "formats": { "e164": "+14155552671", "international": "+1 (415) 555-2671",
//     "national": "(415) 555-2671", "rfc3966": "tel:+14155552671" }, ... }

Whichever path you take, store the E.164 form in your database. Render the international or national form when you display it.

Validation vs. verification vs. lookup

These three terms get used interchangeably and cost very different amounts of money and time. Pick the right one for your use case.

OperationWhat it tells youCostLatencyPrivacy footprint
Structural validationIs the number plausible per the country plan?FreeSub-secondNone
HLR / carrier lookupIs the number assigned, ported, or roaming, and which operator owns it?$0.005–0.02200 ms – 2 sVisible to the operator
Verification (SMS / call OTP)Does the user have access to the number right now?$0.04–0.40SecondsUser receives a real message
Reverse lookupWho is associated with the number?VariesVariesPublic-record / community data

This tool performs structural validation only. If you need carrier-level information for SMS routing decisions, pair it with an HLR provider. If you need proof-of-possession for signup or password reset, use a verification provider that sends a code. If you need to know who a number belongs to, use the WhoseNo reverse lookup.

Common validation errors and how to fix them

  • The leading zero gets stripped. A user types 0300 1234567 (Pakistan), client code strips non-digits and casts to integer, the leading zero disappears. Always treat phone numbers as strings, never as integers.
  • The wrong country is assumed. A US-based form defaults to US for every visitor. A UK customer types +44 20 7946 0958 but the parser drops the + and treats it as US, returning invalid. Always honor the explicit + / 00 prefix and override the default region.
  • Vanity letters are not converted. 1-800-FLOWERS is 1-800-3569377 after letter conversion. If your validator does not include a letter-to-digit conversion table, vanity numbers fail.
  • Extensions are appended. +1 415 555 2671 ext 142 or …x142 or …#142. The extension is not part of the dialable number strip it (and store separately) before validation.
  • Mobile-number portability invalidates carrier guesses. A number originally allocated to T-Mobile may now be served by Verizon or a small MVNO. Prefix-based carrier lookup is approximate for any ported number; only HLR returns the live operator.
  • The number is "possible" but not "valid". Total length fits the country, but leading digits are not in any allocated range. Usually a typo, sometimes a reserved test range 555-01XX in NANP, 070 0 personal-numbering in the UK.
  • The user pasted a string with hidden Unicode. Some keyboards insert non-breaking spaces, RTL marks, or zero-width joiners. Strip everything except 0-9, +, *, # and (for vanity) A-Z before validating.

Phone number normalization workflow

For teams cleaning a CRM, lead list, or user database, run every phone number through this pipeline before insert or update.

  1. Trim outer whitespace.
  2. Strip all characters except digits, +, *, #, and (for vanity conversion) letters.
  3. Convert vanity letters to digits using the standard ITU keypad mapping.
  4. Detect country from the leading + / 00 if present, else fall back to the row's billing country or locale.
  5. Validate structurally with this tool's API or a numbering-plan library.
  6. Store the canonical E.164 in a single column (phone_e164).
  7. Optionally store the line type, country, and original input alongside, but do not rely on the original input as the authoritative form.
  8. On display, format from the E.164 column to international or national style depending on whether the viewer is in the same country as the number.

This pipeline catches the vast majority of formatting issues that cause SMS deliverability failures, broken click-to-call links, and duplicate contact records.

Use cases by role

  • Developers building signup forms, contact imports, or click-to-call links. Validate on the client for instant feedback, validate again on the server before persistence, and store E.164.
  • Marketers and growth teams cleaning lead lists before pushing to an SMS, autodialer, or WhatsApp Business platform. Carrier penalties for sending to invalid numbers are real and growing.
  • Customer support agents verifying a caller-ID number from a ticket before calling back. The line type tells you whether the original ticket came from a mobile, a landline, or a VoIP number context that informs how you respond.
  • Operations and trust & safety checking signup phone numbers against suspicious patterns: premium-rate numbers, sequential test ranges, recently-allocated mobile prefixes that overlap with known fraud rings.
  • Researchers and analysts sanity-checking telephony datasets (call-detail records, SMS traffic logs, scam-report archives) before analysis. Bad numbers in, bad insights out.
  • Webmasters and CMS owners generating tel: click-to-call links from a marketing site or knowledge base the tool emits the RFC3966 form ready to drop into an <a href>.

Phone numbers as personal data

Phone numbers are personal data under the EU GDPR, the UK GDPR, the California CCPA / CPRA, Brazil's LGPD, India's DPDP Act, and most other modern privacy regimes. Even when you only use a number for a transient validation check, regulators expect you to have a lawful basis for the processing, minimize retention, disclose your phone-number handling in your privacy policy, and honor deletion requests within statutory deadlines.

This validator does not log the numbers you submit. We record only anonymous counters (success / failure / detected country) for traffic analytics, plus per-IP rate-limit timestamps that expire within 60 seconds. The number you enter is processed in memory and discarded.

How this tool works

WhoseNo runs on a curated numbering-plan dataset combining the ITU-T E.164 country-code assignments with allocator-published prefix tables Ofcom (UK), the FCC and NANPA (US/Canada), PTA (Pakistan), TRAI (India), CSRA (Saudi Arabia), MCMC (Malaysia), TDRA (UAE), CITRA (Kuwait), and dozens of others alongside operator-prefix data from the same intelligence engine that powers our reverse phone lookup. When you submit a number, the tool strips non-digit characters, detects the country (from the leading + / 00 or from your dropdown selection), normalizes the national portion, runs length and prefix checks against the country plan, and assembles every display format from the verified digits.

The check is purely structural no calls, SMS pings, or HLR queries are placed against the live phone network, and your number is not stored. The same dataset drives our reverse lookup, area-code pages, and country directories, so when you validate on this tool you are using the plan tables that respond to millions of search queries elsewhere on the site.

Frequently asked questions

What is phone number validation?
Phone number validation is the process of checking whether a phone number string matches the official numbering plan of a country correct total length, an allocated prefix, and a recognized line type (mobile, fixed line, toll-free, VoIP, premium rate, etc.). Validation is structural: it answers whether the number could exist, not whether it is currently assigned to a live subscriber. Confirming a live subscriber requires an HLR lookup or an SMS / call verification, which this tool does not perform.
What is E.164 format?
E.164 is the international telephone numbering recommendation published by the ITU. An E.164 number begins with a plus sign, followed by a 1- to 3-digit country calling code and the national subscriber number, with no spaces or punctuation for example, +14155552671. The maximum total length is 15 digits. E.164 is the canonical form for storage, SMS APIs, CRM systems, and SIP signalling. Every other display format is derived from it.
What is the difference between phone number validation and verification?
Validation is structural and offline it checks the number against the country numbering plan without contacting the operator. Verification is live it proves the user has access to the number right now by sending an SMS code or placing a call. Validation costs nothing and runs in milliseconds; verification costs a few cents per attempt and takes seconds. Always validate first; verify only when you need proof of possession (signup, password reset, payment).
What is the difference between validation and formatting?
Validation answers "is this a structurally valid phone number?". Formatting answers "how should I display it?". A number can be formatted into many human-readable styles (E.164, international, national, RFC3966) regardless of whether it is structurally valid. This tool returns both: a yes/no validity flag plus every common display format.
Why does the tool say a number is "possible" but not "valid"?
Possible means the total digit count fits the country plan; valid means the leading digits are also in an allocated range. A number can have the right length but a prefix that is not assigned to any operator usually a typo, sometimes a reserved range like 555-01XX in NANP or 070 in the UK personal-numbering range. Treat possible-but-not-valid numbers the same as invalid for production purposes.
Is this phone number validator free?
Yes. The WhoseNo Phone Number Validator is free to use, requires no signup, and has no usage limits for normal interactive use. The JSON API is rate-limited to 60 requests per minute per IP to prevent abuse; the public web tool is unrestricted.
Do you store the phone numbers I submit?
No. We do not log the actual phone numbers submitted through this tool. We record only anonymous counters (success / failure / detected country) for traffic analytics, plus per-IP rate-limit timestamps that expire within 60 seconds. The number you enter is processed in memory and discarded.
Can I validate a phone number without a country code?
Yes. If you do not include a + or 00 country prefix, the tool uses the country selector dropdown as the default region. If you do include + or 00 followed by the dialing code, the dropdown is ignored and the country is detected from the number itself. For shared dialing codes (the +1 NANP region covers the US, Canada, and 20+ Caribbean countries), the dropdown selection breaks the tie.
What does RFC3966 (the tel: URI) format do?
RFC3966 is the standardized URI scheme for click-to-call for example, tel:+14155552671. Placed in an HTML <a href> or a QR code, it opens the device dialer with the number pre-filled. Always use the E.164 form inside the URI; spaces and punctuation are not permitted.
Does the validator detect mobile vs landline?
Yes, where the country numbering plan publishes that distinction. The tool returns a line type MOBILE, FIXED_LINE, VOIP, TOLL_FREE, PREMIUM_RATE, SHARED_COST, PERSONAL_NUMBER, PAGER, UAN, VOICEMAIL, or UNKNOWN. In countries with full mobile-number portability (most modern markets), the original line-type allocation stays accurate, but the live operator on a given number may have changed since assignment.
Can I use a regex to validate phone numbers?
Only as a sanity check. A pattern like ^\+?[1-9]\d{1,14}$ matches anything that vaguely looks like an E.164 number, but it accepts impossible country codes, ignores per-country length rules, says nothing about line type, and rejects valid short numbers. Use regex as a client-side gate, then validate with a numbering-plan library or this tool before persisting or sending SMS.
How accurate is the line-type detection?
Line-type accuracy depends on the country. Where the regulator publishes per-prefix line-type allocations (US, UK, India, Pakistan, Australia, most EU countries), accuracy is high for the original allocation. After mobile-number portability, the allocation still tells you the original line type but cannot tell you the current operator for that you need an HLR / carrier lookup. Countries that mix landline and mobile across the same prefix range (some Caribbean and African plans) return FIXED_LINE_OR_MOBILE for ambiguous ranges.
Can I validate phone numbers in bulk?
The web form validates one number at a time. The JSON API supports programmatic validation; you can call it from a script in a loop, respecting the 60-requests-per-minute-per-IP limit. A dedicated bulk CSV upload tool is on our roadmap. For very large lists, run libphonenumber locally it is the same numbering-plan dataset.
Does the tool support vanity numbers like 1-800-FLOWERS?
Yes. Letters in the input are converted to digits using the standard ITU keypad mapping (A,B,C → 2; D,E,F → 3; and so on) before validation. 1-800-FLOWERS becomes 1-800-3569377, which is a valid US toll-free number.
How does the tool handle phone-number extensions?
Extensions (ext, x, #, ;ext=) are not part of the dialable number. Strip the extension and store it separately if your application needs it; the validator works on the dialable portion. The "tel:" URI standard supports extensions via the ;ext= parameter for example, tel:+14155552671;ext=142.
What countries does the validator support?
The tool covers every country in the ITU E.164 country-code list (240+ territories). Coverage depth line-type detection, area-code resolution, carrier hints is highest for the 30 most-validated countries: US, Canada, UK, India, Pakistan, Australia, Germany, France, Italy, Spain, Brazil, Mexico, Japan, China, Korea, Singapore, Malaysia, Indonesia, Philippines, Vietnam, Thailand, Saudi Arabia, UAE, Kuwait, Oman, Bahrain, Qatar, South Africa, Nigeria, Turkey, and Poland. Other countries fall back to length-and-country-code validation only.
How does the validator work under the hood?
WhoseNo runs on a curated numbering-plan dataset combining the ITU-T E.164 country-code assignments, allocator-published prefix tables (Ofcom, FCC/NANPA, PTA, TRAI, MCMC and others), and operator-prefix data from the same intelligence engine that powers our reverse phone lookup. Validation is purely structural no calls, SMS pings, or HLR queries are placed against the live phone network.
Can I integrate the validator into my own application?
Yes. The JSON API at /tools/phone-number-validator/api.php accepts POST requests with number and default_region parameters and returns a structured JSON response with validity, country, line type, carrier hints, timezones, and every common display format. The endpoint is same-origin only; if you need third-party access, contact us through the form on /about-us.