
E.164 Explained: The International Phone Number Format
E.164 is the ITU-T recommendation that defines the international public telecommunication numbering plan. It sets out how a telephone number must be structured so that it identifies exactly one destination anywhere in the world: a country code of one to three digits, followed by the rest of the national number, with the complete international number limited to 15 digits. A number written this way is unambiguous without any surrounding context, which is why it is the form you store in a database, send to a telecom API and put in a SIP header.
The current edition is E.164 (02/2026), approved on 13 February 2026 and published by the ITU. The 15-digit ceiling and the country code structure have been the stable core of the recommendation across editions. What has changed over time is the number of categories it defines, which is one reason older summaries of E.164 found online disagree with each other.
Quick facts
| Full title | The international public telecommunication numbering plan |
| Issued by | ITU-T, the standardisation sector of the International Telecommunication Union |
| Current edition | E.164 (02/2026) |
| Maximum length | 15 digits for the complete international number |
| Country code | 1 to 3 digits, assigned by ITU-T |
| Character set | Decimal digits only |
| Is the “+” part of the number? | No. It is notation, not a digit |
| Are prefixes part of the number? | No. International and national trunk prefixes are dialling instructions |
| Categories in the current edition | Eight |
| Related standards | E.123 (notation), RFC 3966 (tel URI), RFC 6116 (ENUM), RFC 3261 (SIP) |
The three parts of an E.164 number
Read the example above from the left. 44 is the country code, assigned by ITU-T to the United Kingdom. 20 is the national destination code, the field the UK numbering plan uses to identify a geographic area, in this case London. 79460018 is the subscriber number, which identifies the specific line or route within that area.
The country code plus the rest is the international number. The part after the country code, here 2079460018, is the national significant number.
The example is a real format but not a real line. It comes from the block Ofcom reserves for TV and radio drama, 020 7946 0000 to 020 7946 0999, which will not be allocated to communications providers. If you need a plausible number for documentation, test fixtures or screenshots, reserved ranges like this one are the responsible choice. Ofcom publishes equivalents for mobile, freephone, premium rate and UK-wide ranges, and other regulators maintain their own.
The 15-digit budget
The 15-digit ceiling is a total, not a per-field allowance, and the fields compete for it:
- The complete international number is at most 15 digits.
- The national significant number is at most 15 digits minus the length of the country code.
- The subscriber number is at most 15 digits minus the length of the country code and the national destination code.
So a country with a three-digit code leaves 12 digits for everything else, while a country with a one-digit code leaves 14. Global service numbers are constrained the same way: because a global service country code is three digits, the global subscriber number can be at most 12.
Two consequences matter in practice. First, no country uses the full 15 digits today, so a schema that assumes 15 will hold anything valid, while one that assumes a national maximum will eventually break. Second, the maximum is a ceiling and not a shape. Numbers of different lengths coexist inside a single country code, and lengths change over time as numbering plans expand.
What is not part of an E.164 number
This is where most implementation bugs come from. Four things look like part of the number and are not.
The plus sign. The “+” is notation defined for presenting numbers, not a digit. It tells a human or a system that what follows is a complete international number and that the caller’s own international prefix must be dialled first. You cannot dial a “+” on a rotary phone, and switches never see one.
The international prefix. This is the escape code that moves a call from the national plan to the international one. It varies: within the European Union, Member States must ensure that “00” is the standard international access code under Article 93(5) of the European Electronic Communications Code, while countries in the North American Numbering Plan use 011, and a minority of countries use something else again.
The national trunk prefix. Many plans put a digit in front of the national significant number for domestic dialling, most often a 0. In the UK example, the number is written 020 7946 0018 nationally and +44 20 7946 0018 internationally. The leading 0 is a dialling instruction and is dropped in the E.164 form. Not every country does this, which is exactly why blanket “strip the leading zero” logic is dangerous.
Extensions and short codes. A PBX extension is internal to a private system and has no meaning on the public network. Short codes and service numbers are national-only strings. RFC 3966 makes the point neatly with an example: “911” needs to be labelled with a context of “+1”, because “+1-911” is not a valid E.164 number. Anything that exists only at local, intra-network or national level is not an E.164 number, however many digits it has.
One number, six ways of writing it
Only two of these six are safe to move between systems. The locally dialled form is meaningless without knowing the country. The internationally dialled form embeds the caller’s own prefix, so it is wrong the moment the caller moves. The tel URI and the SIP request URI are E.164 numbers wearing a protocol costume: strip the scheme, the separators and the host, and the digits underneath are the same.
That is the practical value of the standard. E.164 gives you one representation that means the same thing in a CRM, a billing record, a SIP INVITE and a carrier interconnect.
The eight categories in the current edition
Most descriptions of E.164 online list five categories of number. The February 2026 edition defines eight, each with its own structure and digit analysis:
| Category | Clause | Structure defined by the recommendation |
|---|---|---|
| Geographic Areas | 7 | Country code plus national significant number, itself a national destination code and a subscriber number |
| Global Services | 8 | Country code for global services plus a global subscriber number |
| Other Global Services | 9 | Country code for other global services plus an other global subscriber number |
| Global Satellite Services | 10 | Country code plus identification code plus subscriber number |
| Networks | 11 | Country code plus identification code plus subscriber number |
| Groups of Countries | 12 | Country code plus group identification code plus subscriber number |
| Resources for trial | 13 | Numbering resources set aside for trials |
| IoT and M2M services | 14 | Country code plus identification code plus subscriber number |
The pattern is worth noticing. Only the geographic category splits the number the familiar way. The others replace the national destination code with an identification code that names a network, a satellite operator, a group of countries or a service, which is how the plan accommodates numbers that belong to no single country.
The clearest example of a non-geographic category is the Universal International Freephone Number. As the ITU documents, a UIFN uses the global service country code 800 followed by an eight-digit Global Subscriber Number, giving a fixed 11-digit format, and the ITU Telecommunication Standardization Bureau acts as registrar.
The recommendation also handles the boundary cases explicitly. Annex A covers national-only numbers and calling line identification, and clause 15 covers the international prefix, confirming that the prefix sits outside the number rather than inside it.
Where E.164 numbers turn up outside dialling
SIP. In a call to the public network, the dialled number normally appears as the user part of the request URI, in the form sip:442079460018@host. The protocol itself is defined in RFC 3261; the digits it carries are E.164. If you are new to how this fits together, our SIP explainer covers the signalling side.
tel URIs. RFC 3966 defines the tel: scheme and states that phone numbers must use the global form, meaning the E.164 form, unless they cannot be represented that way. Local numbers require an explicit phone-context. Visual separators inside a tel URI are cosmetic and are removed before dialling.
ENUM. RFC 6116 defines how an E.164 number is mapped into the DNS so that it can be resolved to URIs used in call setup. In that system the input string must begin with “+”, which is how ENUM data is kept distinct from other digit strings in the DNS.
Mobile. The dialable number of a mobile subscriber is an E.164 number. The identity that the network uses to recognise the subscription is a different identifier defined by a different recommendation, ITU-T E.212. They are frequently confused because both are long digit strings attached to the same SIM.
What an E.164 number does not tell you
An E.164 number is a globally unique address. It is not a fact about a person, a place or a service, and treating it as one causes real problems.
It does not prove location. A country code says which numbering plan issued the number. It says nothing about where the caller is standing, where the business operates, or where the call is answered. Number portability weakens the inference further: a number can move between operators while keeping its digits, so even the operator cannot be reliably read from the prefix.
It does not tell you the line type. Mobile, fixed, freephone and premium ranges are distinguishable in many national plans, but the rules are national and they change. Inferring type from digits without current per-country metadata is guesswork.
It does not guarantee reachability. A well-formed number can be unallocated, out of service, or unreachable from the caller’s country. National freephone numbers in particular are often not dialable from abroad even when prefixed with the country code.
It does not entitle you to present it. Holding a number does not automatically mean you may use it as calling line identity on outbound calls, and some countries add explicit conditions before an international caller ID will be delivered. Presentation rules are separate from allocation rules, and the consequences of getting them wrong show up as blocked calls and spam labelling. Our article on caller ID reputation covers what happens downstream.
Working with E.164 in software
A short checklist that removes most of the recurring bugs:
- Store numbers as strings. An integer type destroys leading zeros and cannot hold the “+”.
- Pick one canonical form and document it. Either always store the “+” or never store it. Mixed conventions in one database are worse than either choice.
- Normalise once, at the boundary. Convert on input and on ingest, not repeatedly and inconsistently deeper in the stack.
- Keep the raw input. Store what the user typed alongside the normalised value so that failures are debuggable.
- Parse the country code as a variable-length prefix. Codes are one to three digits and are not self-delimiting, so match longest-first against a current list.
- Do not strip a leading zero before you know the country. In some plans it is a trunk prefix to remove; in others it is significant.
- Keep extensions in a separate field. If you need them in a URI, RFC 3966 provides an explicit parameter for the purpose.
- Treat shape checks as shape checks. A pattern such as
^\+[1-9]\d{1,14}$confirms the string could be an E.164 number. It does not confirm that the country code exists, that the length is right for that country, or that the number is in service. - Use maintained metadata for anything beyond shape. Per-country lengths and range rules change, which is why metadata-driven libraries exist rather than hand-written regular expressions per market.
- Use reserved ranges in tests and documentation. Regulator-reserved drama and documentation ranges will not ring a stranger’s phone.
Common mistakes
| Mistake | Why it fails |
|---|---|
| Assuming a fixed national length | Lengths differ within a country and change as plans expand |
| Storing numbers as integers | Leading zeros are lost and the “+” cannot be represented |
| Slicing the first two digits as the country code | Codes are one to three digits, so fixed slicing misparses most of the world |
| Always removing a leading zero | Correct for trunk prefixes, wrong for plans where the zero is significant |
| Treating “+” as a digit | It is presentation notation and never appears in signalling |
| Putting short codes or extensions in an E.164 field | These have no meaning outside their own network |
| Reading geography from the prefix | Portability and virtual delivery both break the assumption |
| Validating only with a regex | Shape is necessary but not sufficient |
Where didlogic fits
didlogic works at the layer where E.164 numbers stop being data and start being routing decisions: the numbers themselves, the carrier routing behind them, and SIP delivery into whatever system answers the call. Numbers are available in more than 140 countries and are delivered over standard SIP, so the digits that arrive at your platform are the same digits you store.
The format appears in two concrete places in the portal, which is a useful illustration of the difference between a number and a URI. When you forward an inbound number to a destination on the public network, the destination is entered in E.164 format, country code followed by the number. When you forward it to an IP destination instead, the call is routed in the form DID@ip_address:port, so the number becomes the user part of a SIP URI while the host part identifies the endpoint. Same digits, two different addressing schemes.
Two operational points sit close to this. didlogic describes local termination as completing a call within the network of the country associated with the number, so that the caller ID is presented according to that country’s rules rather than arriving as anonymous or being rejected outright. And some markets add conditions on top: for outbound calls to the United Arab Emirates and Saudi Arabia, didlogic notes that international caller IDs must be allowlisted first, with the presented number required to be valid and answerable on callback. A correctly formatted E.164 number is the starting point in both cases, not the finishing line.
Configuration details for common platforms are published at docs.didlogic.com, and the operational questions above are covered in the didlogic FAQ.
Frequently asked questions
What does E.164 stand for?
Nothing. It is the reference number of an ITU-T recommendation in the E series, titled “The international public telecommunication numbering plan”. The convention is the same as RFC numbers at the IETF.
How many digits can an E.164 number have?
At most 15, counting the country code and everything after it. The plus sign, the international prefix and any national trunk prefix are excluded from the count.
Is the plus sign part of an E.164 number?
No. It is notation indicating that the digits form a complete international number and that the caller’s international prefix must be dialled first.
What is the difference between E.164 and E.123?
E.164 defines the numbering plan, meaning the structure and length of the number itself. E.123 covers notation, meaning how numbers should be written and presented in print and on screen.
Can I work out which country a number belongs to from the country code?
You can identify the numbering plan. That is not the same as identifying a location. Several countries share a single code under an integrated numbering plan, and portability plus IP delivery mean the answering point may be somewhere else entirely.
Are extensions part of the E.164 number?
No. An extension is internal to a private system. If you need to express one in a URI, RFC 3966 defines a parameter for that purpose, kept separate from the number.
Why do some countries have one-digit country codes and others three?
Codes were assigned over decades on the basis of expected traffic and numbering capacity, and shorter codes leave more of the 15-digit budget for the national number. Assignment is administered by ITU-T.
Do I need E.164 formatting to make a call?
Not to dial a local number from a local handset. You do need it whenever a number crosses a system boundary: an API request, a database record, a SIP header or a carrier interconnect. That is the problem the standard exists to solve.
Continue learning
Free trial is available for IT infrastructure managers and developers.