从不同长度的数字中获取国家/地区代码

时间:2013-07-08 13:34:06

标签: android

我们知道有不同长度的数字。在欧洲,我们大多数都有9位数字和国家代码。

在北美,我们经常会找到10位数字。

我试图了解如何从一个可能长度不同的数字中获取国家/地区代码。

有什么想法吗?也许你知道一些可以做到的工作库吗?

3 个答案:

答案 0 :(得分:1)

我假设您在谈论电话号码国家/地区代码。国家代码由国际电联定义(https://en.wikipedia.org/wiki/List_of_country_calling_codes)。国家/地区代码可以是1,2或3位数。您唯一的选择是拥有所有国家/地区代码的列表并从那里解析它。请注意,没有重叠;例如,+ 44属于英国,没有国家只有4开始。

更新:北美地区有4个数字前缀,而不是1,由+1和3位数的NPA组成(http://en.wikipedia.org/wiki/North_American_Numbering_Plan)。同样的规则也适用,因为+ 1-NPA不能重复。巴巴多斯似乎是+1246,但没有其他国家或地区可以从+1246开始。您可以从http://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes

获取所有NPA的列表

答案 1 :(得分:1)

关键事实:

  1. 国家/地区代码始终位于号码的开头,因此无论号码长度如何,都很容易找到。

  2. 没有重叠,正如@Luis指出的那样。

  3. A(看起来很漂亮)完整的国家/地区代码列表是here。如果按长度排序(最短的第一个)并通过列表比较第一个n数字和列表条目,您将得到答案。

    但是,如果查看列表,您会看到有各种代码组。更智能的方法会注意到:

    • 所有以1开头的数字都是美国,加拿大或其他美国相关地方,在这种情况下,接下来的三位数字会告诉您哪一个。
    • 7是Khazakstan
    • 除了20之外,所有以2开头的国家代码都是三位数。
    • 等......

答案 2 :(得分:1)

国家/地区代码从左到右解析,确定性端点类似于霍夫曼编码的概念。即,如果您首先看到1,请停止,这是美国/加拿大/相关地区。如果你看到除7(俄罗斯/哈萨克斯坦)以外的大多数其他数字,继续前进。其中一些数字可能会在第二个值上终止。

国家/地区代码列表位于:http://www.howtocallabroad.com/codes.html

为了确定哪个国家/地区代码存在,您可以轻而易举地编写自己的电话号码字符串解析器。

(不要忘记,如果这些是来自特定国家/地区的数字,您还必须考虑该国家/地区的退出代码,这也在我链接的页面上)

编辑:哦,我猜路易斯覆盖了它。但雅各布对巴巴多斯的评论不正确。巴巴多斯与美国的国家代码相同; 246是美国/加拿大国家代码中的本地“区号”。