【问题标题】:Algorithm to determine international calling code from phone number从电话号码确定国际电话代码的算法
【发布时间】:2012-01-03 20:55:48
【问题描述】:

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

【问题讨论】:

    标签: ios parsing addressbook phone-number


    【解决方案1】:

    国家/地区电话代码很容易从电话号码中检测到。

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

    然后,查找国家代码就像遍历树一样简单,逐个数字,直到找到国家代码匹配的最后一个分支。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

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

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

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


        现在,当您必须处理一些 #s 上已经有国家代码而有些没有的事实时,事情变得更加混乱。我发现的唯一一个国家代码也可以作为主要区号出现的国家代码是新加坡——我认为它是+65-65...。您可以准确地使用以下业务逻辑:

        • 注意美国号码格式:(xxx) xxx-xxxx 等。
        • 利用在特定国家/地区只能出现特定数字长度这一事实。如果您足够努力地搜索,则有这方面的文件。例如,所有美国号码的长度都是 10,日本号码的长度可以是 9 或 10。这可以为您提供更多信息。
        • 对于大多数国家/地区,忽略前导 0。意大利和科特迪瓦是我发现的仅有的两个例外,它们可以有有效的前导 0。否则,这通常只是一个当地电信会议,用于在国内逗留。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            我们无法通过电话号码识别国家代码。

            【讨论】:

            • 如果我有数组或数据库或其他东西并比较两个数字将起作用,而与电话号码或邮政编码或其他东西无关。如果您看到我的问题,我要求使用地址簿框架找到它的解决方案。并且没有阅读它,你给我的答案打了-1分........
            • 好吧,声明“我们无法从电话号码中识别国家代码”。是假的。
            • 根据问题,答案是正确的.....您甚至没有阅读问题是什么以及答案是否与问题相关?
            • 投反对票是因为未来的读者不应该看到“我们无法从电话号码中识别国家代码”这句话并相信它。如果他们看到那句话,他们应该在旁边看到一个大的-1,告诉他们“谨慎行事,不是每个人都同意这一点”。即使在多次重读您的问题之后,您的答案仍然是错误的,所以我仍然不赞成。您还要求提供算法,而不是 API 方法。
            猜你喜欢
            • 2012-06-24
            • 2015-01-19
            • 1970-01-01
            • 1970-01-01
            • 2012-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多