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

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

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

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

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

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

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

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


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

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

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

经过一些研究,我发现这个lib似乎做了以下工作: https : //github.com/iziz/libPhoneNumber-iOS

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

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

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

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

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