Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a standard for phone numbers?

Tags:

Before you say that this has already been asked, know that I've already reviewed these:

  • Is there a standard for storing normalized phone numbers in a database? - This is from 2008, and says that, at the time, there was no such standard. I'm hoping that something changed in the last 13 years.
  • How to validate phone numbers using regex - I already have the parse; it's quite easy: If it's not a digit, skip it. This question is not about the parser, but the format in which I save/display it. I am not worried about how hard it is to parse, but whether it's in standard format.

Say I'm working on a program that has to deal with phone numbers, and I want to make sure that they're saved and displayed in a standard format, so other programs and humans can also understand them predictably & consistently.

For instance, I've seen the following all be valid representations for the same US phone number:

  • 1234567
  • 123-4567
  • 123 4567
  • 5551234567
  • (555) 1234567
  • 555-1234567
  • 555 123 4567
  • 555-123-4567
  • (555)-123-4567
  • (555) 123-4567
  • (5) 123 4567
  • 1-555-123-4567
  • (1) 555-123-4567
  • +1 555-123-4567
  • +1 555 123-4567
  • +1 (555) 123-4567
  • Ad nauseum…

And then different countries represent numbers in different ways:

  • 55 1234 567 8901
  • 55 12 3456 7890
  • 55 123 456 7890
  • 55 1234 567890
  • 555 123 456
  • (55) 123 4567
  • 5.555.123-45-67
  • Ad nauseum…

As you can see, the number of ways a user can see a valid phone number is nearly infinite (The Wikipedia page for Telephone numbers in the UK is 26 printer pages long). I want all the numbers in my database and on the screen to be in a universally-recognizable format. As far as I can tell, ISO and ANSI have no defined format. Is there any standard notation for phone numbers?

like image 786
Ky. Avatar asked Apr 01 '13 14:04

Ky.


People also ask

What is the correct phone number format?

To format phone numbers in the US, Canada, and other NANP (North American Numbering Plan) countries, enclose the area code in parentheses followed by a nonbreaking space, and then hyphenate the three-digit exchange code with the four-digit number.

What is a valid phone number format us?

Since the U.S. and Canada both use the North American Numbering Plan, the commonly accepted formatting of phone numbers is (NPA) NXX-XXXX, NPA-NXX-XXXX or 1-NPA-NXX-XXXX, where 'NPA' is the area code, 'NXX' is the central office code and 'XXXX' is the remaining subscriber number personal to each phone number.

What makes a valid phone number?

If the phone number is active and is a number that can receive SMS, it is valid.

How many digits is a valid phone number?

Phone numbers in the United States typically consist of 11 digits — the 1-digit country code, a 3-digit area code and a 7-digit telephone number. The 7-digit telephone number is further comprised of a 3-digit central office or exchange code and a 4-digit subscriber number. The country code of USA is +1.


1 Answers

There's no ISO standard, but there are ITU standards. You want E.123 and E.164.

In summary, any phone number is represented by +CC MMMMMM... where CC is the country code, and is one to three digits, and MMMMMM... is the area code (where applicable) and subscriber number. The total number of digits may not be more than 15. The + means "your local international dialling prefix".

I'll give a few examples using my own land line number.

So, for example, if you are in Germany, the number +44 2087712924 would be dialled as 00442087712924, and in the US you would dial it as 011442087712924. The 44 means that it is a UK number, and 2087712924 is the local part.

In practice, the long string of MMMMM... is normally broken up into smaller parts to make it easier to read. How you do that is country-specific. The example I give would normally be written +44 20 8771 2924.

As well as the unambiguous E.123 representation above, which you can use from anywhere in the world that allows international dialling, each country also has its own local method of representing numbers, and some have several. The example number will sometimes be written as 020 8771 2924 or (020) 8771 2924. The leading 0 is, strictly speaking, not part of the area code (that's 20) but a signal to the exchange meaning "here comes a number that could go outside the local area". Very occasionally the area code will be ommitted and the number will be written 8771 2924. All these local representations are ambiguous, as they could represent valid numbers in more than one country, or even valid numbers in more than one part of the same country. This means that you should always store a number with its country code, and ideally store it in E.123 notation. In particular you should note that phone numbers ARE NOT NUMBERS. A number like 05 is the same as 5. A phone number 05 is not the same as 5, and storage systems will strip leading zeroes from numbers. Store phone numbers as CHAR or VARCHAR in your database.

Finally, some oddities. The example number will be written by some stupid people as 0208 771 2924. This is diallable, but if you strip off the leading 0208 assuming that it is an area code, then the remainder is not valid as a local number. And some countries with broken phone systems [glares at North America] have utterly bonkers systems where in some places you must dial all 10 digits for a local call, some where you must not, some where you must dial 1NNN NNN NNNN, some where you must not include the leading one, and so on. In all such cases, storing the number as +CC MMMMM... is correct. It is up to someone actually making a call (or their dialling software) to figure out how to translate that into a dialable sequence of digits for their particular location.

like image 74
DrHyde Avatar answered Oct 08 '22 06:10

DrHyde