Solved

Parsing International Phone Numbers

Posted on 2007-12-02
10
2,602 Views
Last Modified: 2013-12-12
I am trying to write a routine to parse international phone numbers, more specifically I want to extract the country code. I have a table of all the country codes, however, with variable numbering systems in Europe, I'm thinking it may be tough to do so reliably.

In calculating the country codes I hope they have arranged them so
that there is no way to overlap. For instance, if one country has
12345  (A) and another has 123 (B), then if I search for 123, I'll get
two hits, but only one is right. I can get around this by checking the
longest ones first

BUT

What happens if country B has a phone number like

123454545454545 where 123 is the country code and 454545454545 is the number

If I don't do it right, I could also accidentally get a hit on country A which has a country code of 12345.

I'm currently writing this routine in PHP. I'm not sure what section this would really go under.
0
Comment
Question by:dignified
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 3
10 Comments
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 200 total points
ID: 20393865
>If I don't do it right, I could also accidentally get a hit on country A which has a country code of 12345.
if you really had a numbering plan code with 12345, then 123 is a more general code of the same country, and 12345 is only a specific part, like only the mobile numbers range.

so, from a given number, the code to look for is the longest match.

say you have 1 table with all the prefix codes:
code   country
352    Luxemburg (range for all luxemburg phones, fixed + cellular)
3526   Luxemburg - Mobile (range for all luxemburg cellular phones)
et ....

assuming you have mysql, the query would be








select t.*
from yourtable t
where '35269140923040' LIKE code || '%'
order by length(t.code)
limit 1;

Open in new window

0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 20393867
the code snippet above would return 3526   Luxemburg mobile, btw...
0
 

Author Comment

by:dignified
ID: 20393895
It won't necessarily be the longest one though will it? Perhaps the system is worked out so that this is true? But with any random number this isn't the case.
0
Save the day with this special offer from ATEN!

Save 30% on the CV211 using promo code EXPERTS30 now through April 30th. The ATEN CV211 connects a laptop directly to any server allowing you instant access to perform data maintenance and local operations, for quick troubleshooting, updating, service and repair.

 
LVL 25

Expert Comment

by:kode99
ID: 20393901
The wikipedia entries for the phone numbering system contains all the information you need.  You will have to do a few checks to make sure any given number fully fits a given format before you pull out the country code - this way you can be sure of getting it right.

Dial plan info,
http://en.wikipedia.org/wiki/Telephone_numbering_plan

Coutry code info
http://en.wikipedia.org/wiki/Country_calling_codes
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 20393943
>Perhaps the system is worked out so that this is true?
yes, the system is worked out that way, otherwise it could not work.

>But with any random number this isn't the case.
have you any proof of the contrary?
note: I work as billing engineer in a telco company, so I know what I am speaking about :)
0
 

Author Comment

by:dignified
ID: 20393962
>yes, the system is worked out that way, otherwise it could not work.
This is probably all I need to know.


>have you any proof of the contrary?
Didn't you just agree with me in your previous comment? Read my original question for an example of what I'm talking about.  As long as all I have to do is use the longest match, then that is fine with me.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 20394156
>As long as all I have to do is use the longest match, then that is fine with me.
you have to.

>>have you any proof of the contrary?
I am sure you could not have such a proof, but maybe you "found" an example where you had trouble identifying the correct code...


note: the example I showed for luxemburg 352 and 3526 can be differentiated in your tables, where you could say 352 = country code 3526 = country mobile subnet
then, depending on what you are looking for, you could exclude the subnets for example in your search, so you find the actual country and not the "deepest match" subnet...
0
 
LVL 25

Assisted Solution

by:kode99
kode99 earned 50 total points
ID: 20400004
It really does not matter if you do longest or shortest,  either will be right,  but if you work from the left to the right your search will be faster and more efficient as it will find the short codes faster.  Not surprisingly - all the larger countrys have 2 digit codes,  which statistically will likely be were most of the numbers you lookup will be.

There are no overlaps between short codes and longer codes.  For example Egypt is 20,  there is no other country code whole first two digital are 20. So once you find 20 as the first two digits you know you are done and have the country code.  If you are looking at a number from Croatia,  code 385, with the first two digits of 38,  at this point you know there is no country with just 38 so you have to look at one more digit to get the 5 for the full code.

If you look at the chart of country codes I linked above it is laid out so you can easily see this.  The whole system has its roots in how the original mechanical switching system operated.  Also why the codes are more or less organized by regions on the globe.

Of course North America is the exception to the numbering system though with the leading '1' it is still not going to conflict anyway.

To really verify things you can then format check the rest of the number to be sure it has the right number of digits for the numbering used in the country specified.  This can also be a sanity check which can be useful if the numbers have been entered manually and are likely to have mistakes.
0
 

Author Comment

by:dignified
ID: 20400256
>To really verify things you can then format check the rest of the number to be sure it has the right number >of digits for the numbering used in the country specified.  This can also be a sanity check which can be >useful if the numbers have been entered manually and are likely to have mistakes.

Yes, the right number of digits is what I was also worried about since I don't have a table with this information.
0
 
LVL 25

Expert Comment

by:kode99
ID: 20415225
Unfortunatly I don't know of a nice table of this information but you can get the full details for any given country's internal numbering system through the ITU website here,

http://www.itu.int/oth/T0202.aspx?parent=T0202



Here's an example of exchange information for Africa,

http://www.wtng.info/ccod-2.html#CC255

This is from the World Telephone Numbering guide,
http://www.wtng.info/





0

Featured Post

Creating Instructional Tutorials  

For Any Use & On Any Platform

Contextual Guidance at the moment of need helps your employees/users adopt software o& achieve even the most complex tasks instantly. Boost knowledge retention, software adoption & employee engagement with easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Let’s list some of the technologies that enable smooth teleworking. 
Messaging apps are amazing tools with the power to do a lot of good, but the truth is the process of collaborating with coworkers requires relationships established through meaningful communication - the kind of communication that only happens face-…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question