根据电话号码确定国际电话代码的算法

Sat*_*yam 3 parsing phone-number addressbook ios

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

dje*_*lin 5

国家/地区代码是一个比较杂乱的话题,但是非常标准,只需程序员进行一些维护,就可以解决。

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

  1. 建立一个简单的数据库-甚至可以存储为平面文件,然后将其存储在国家/地区代码的字典中。

  2. 从n = 1到3递归检查电话号码的前n个数字是否与任何国家/地区代码匹配。如果是这样,那就是您的国家代码。如果尝试3失败,则该国家/地区代码无效。

  3. 如果您喜欢处理准歧义词。如果您看到国家代码之间存在重叠,例如,您看到维尔京群岛的代码为“ 1340”,那是因为在某种程度上可能不相关,它是美国国家代码“ 1”的子集。国家代码有时反映了地缘政治情况,通常表示为通过将国家/地区代码拆分为下一位数字。“ 1”将是国家的官方代码,但您更感兴趣的取决于您的应用程序。

注意:当发生苏联解体之时,这需要维护。


现在,当您不得不处理以下事实时,事情就会变得更加混乱:某些#s已经带有国家代码,而有些则没有。我发现的唯一国家代码也可以作为领先的区号出现在新加坡-我认为是+65-65...。您可以按照正确的准确性使用业务逻辑:

  • 注意美国电话号码格式:(xxx)xxx-xxxx等。
  • 使用以下事实:在给定的国家/地区,只能出现特定的数字长度。如果您进行足够的搜索,就会有关于此的文档。例如,所有美国号码的长度为10,日本号码的长度为9或10。这可以为您提供更多信息。
  • 对于大多数国家/地区,忽略前导0。意大利和象牙海岸是我发现的仅有的两个例外,它们可以具有有效的前导0。否则,通常这只是在该国居住的当地电信惯例。


Sat*_*yam -9

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