从电话号码确定国际呼叫代码的算法

时间:2011-11-22 13:14:38

标签: ios parsing addressbook phone-number

我可以使用iOS上的地址簿框架从设备中检索联系人的电话号码。如何分离或识别哪个国家/地区代码以及哪个是实际电话号码? 有可能吗?

5 个答案:

答案 0 :(得分:5)

国家/地区代码是一个相当混乱的主题,但足够标准,通过一些程序员维护,您可以解决它。

您可以通过其初始子序列识别国家/地区代码。执行以下算法:

  1. 构建一个简单的数据库 - 甚至可以存储为平面文件并加载到内存中的字典中 - 国家代码。

  2. 递归地从n = 1到3,检查电话号码的前n位是否与任何国家/地区代码匹配。如果是,那就是你的国家代码。如果尝试3失败,则不是有效的国家/地区代码。

  3. 如果你喜欢处理准歧义。如果您看到国家/地区代码重叠,例如如果你看到维尔京群岛的“1340”,那是因为在一些可能无关紧要的意义上它是美国国家代码“1”的子集国家代码有时反映地缘政治情况,通常通过将国家代码分成下一个数字来表示。 “1”将是官方国家代码,但您更感兴趣取决于您的申请。

  4. 注意:当苏联解体时发生这种情况时需要维护。


    现在,当你必须处理一些#已经有国家代码而有些#不存在这样的事实时,事情会变得更加混乱。我发现国家代码也可以作为领先区号发现的唯一国家代码是新加坡 - 我认为它是+65-65...。通过良好的准确性,您可以使用以下行的业务逻辑:

    • 注意美国数字格式:(xxx)xxx-xxxx等。
    • 使用在给定国家/地区只能发生某些数字长度的事实。如果你搜索得足够多,就有这方面的文件。例如,所有美国号码的长度都是10,日语号码的长度可以是9或10.这可以为您提供更多信息。
    • 忽略大多数国家/地区的领先0。意大利和象牙海岸是我发现的唯一两个例外,它们可以有效领先0。否则,这通常是留在国内的当地电信大会。

答案 1 :(得分:1)

我所做的是在维基百科上创建一个包含所有国家/地区呼叫代码的数组。然后,当我有一个电话号码时,我尝试将前四位数字与一个国家/地区呼叫代码匹配。如果没有匹配,请尝试前三位数,依此类推。最终我找到了调用代码。

答案 2 :(得分:0)

经过一些研究后,我发现这个lib似乎可以完成这项工作: https://github.com/iziz/libPhoneNumber-iOS

答案 3 :(得分:0)

国家/地区的电话代码很容易通过电话号码检测到。

您需要做的第一件事就是将调用代码解析为树,其中每个数字代表一个分支。

然后,查找国家/地区代码就像逐行遍历树一样简单,直到最后一个国家/地区代码匹配为止。

此时(2016年7月),最长的国家/地区呼叫代码有5个数字,因此您的树不应超过5个分支级别。

答案 4 :(得分:-7)

我们无法从电话号码中识别国家/地区代码。