E.164 is the international standard that defines how a complete phone number is written. A number in E.164 form starts with a plus sign, then a country calling code, then the national number, with no spaces, dashes or brackets. The whole thing is at most fifteen digits.
Anatomy of an E.164 number
Take the example +14155550123.
- The
+signals that the number is international. 1is the country calling code, shared by the United States, Canada and several other territories.415is the area code, part of the national significant number.5550123is the subscriber number.
Why canonical storage matters
People type the same number many ways: (415) 555-0123, 415.555.0123, 1-415-555-0123. If you store them as typed, you cannot deduplicate users, you cannot match an incoming code to the right record and comparisons fail silently. Storing E.164 gives you one representation to index and compare.
Common mistakes
- Storing as an integer. Leading zeros disappear and large values overflow in some systems. Use a string column.
- Forgetting the plus sign in display. Store with it, and strip it only where an API explicitly asks for digits only.
- Keeping national trunk prefixes. A leading 0 used for domestic dialing in many countries is not part of the international number.
- Assuming fixed length. Lengths vary by country, so a single regex for all countries will reject valid numbers.
Validating without over-validating
Use a maintained library based on Google's libphonenumber data rather than hand-written patterns. Numbering plans change, and a library tracks those changes. Validate that the number is possible and, where appropriate, that its type matches what you accept.
import phonenumbers
n = phonenumbers.parse('(415) 555-0123', 'US')
e164 = phonenumbers.format_number(n, phonenumbers.PhoneNumberFormat.E164)Display versus storage
Store E.164, but display a friendlier national format for the user's own region. Store the country separately if you need to default parsing for future input. Keep these concerns apart and your data stays clean while your interface stays readable.
Where E.164 helps verification directly
Verification flows pass numbers between your app, a provider and your database. Any mismatch in format at a boundary can cause a code to be attributed to the wrong account or a lookup to fail. Normalising at the edge of your system, once, removes the problem for everything behind it.
In short, accept messy input, convert to E.164 immediately, store strings, and format only at the last moment for humans.
Frequently asked questions
Is E.164 the same as international dialing format?
Not quite. E.164 is the canonical form without the exit code, such as 011 or 00, which people dial before the country code. The plus sign stands in for that prefix. Systems store the plus form, and phones add the right exit code themselves.
What is the maximum length?
Fifteen digits excluding the plus sign. Most real numbers are shorter. Use library validation for each country instead of a fixed length rule, because valid lengths differ widely between regions and some countries allow several.
Can I store numbers as integers?
Avoid it. Integers drop leading zeros in some cases, overflow in small types and cannot hold the plus sign. A string column with an index and a format check gives you reliable comparison and deduplication.
How do I handle numbers with extensions?
Extensions are not part of E.164. Store the base number in E.164 and keep the extension in a separate field if you need it at all. For SMS verification extensions are irrelevant, since text messages go to the main line, so it is usually best to reject or strip them at input.
Next steps
Explore the supported services to see what is available today, and read the API documentation if you plan to automate. The about page explains how the platform works, the help center answers common questions, and you can contact the team about anything specific. For more guides, browse the blog. When you are ready, sign in to start a verification.
Related reading: Normalizing Phone Input Before Verification Requests and US Area Codes and the NANP Explained for Verification.