电话号码有标准吗?

时间:2013-04-01 14:42:26

标签: standards phone-number

在您说这已经被问过之前,请知道我已经审核了这些内容:


说我正在制作一个必须保存和解析电话号码的程序,我想确保它们以标准格式保存,所以其他程序也可以解析它们。

例如,我看到以下所有内容都是同一美国电话号码的有效陈述:

  • 1234567
  • 123-4567
  • 123 4567
  • 5551234567
  • (555) 1234567
  • 555-1234567
  • 555 123 4567
  • 555-123-4567
  • (555)-123-4567
  • (555) 123-4567
  • (5) 123 4567
  • 1-555-123-4567
  • (1) 555-123-4567
  • Ad nauseum ......

然后不同的国家以不同的方式代表数字:

  • 55 1234 567 8901
  • 55 12 3456 7890
  • 55 123 456 7890
  • 55 1234 567890
  • 555 123 456
  • (55) 123 4567
  • 5.555.123-45-67
  • Ad nauseum ......

正如您所看到的,用户可以看到有效电话号码的方式几乎是无限的(Telephone numbers in the UK的维基百科页面长度接近100个打印机页面)。我希望我的数据库中的所有数字都是普遍可识别的格式。据我所知,ISO没有定义的格式。 电话号码是否有标准符号?

2 个答案:

答案 0 :(得分:41)

没有ISO标准,但有ITU标准。你想要E.123和E.164。

总之,任何电话号码都由+ CC MMMMMM ...表示,其中CC是国家代码,是一到三位数,MMMMMM ...是区号(如果适用)和用户号码。总位数不得超过15. +表示“您的本地国际拨号前缀”。

我将使用我自己的地面线号给出一些例子。

因此,例如,如果您在德国,则号码+44 2087712924将被拨打为00442087712924,而在美国,您将拨打为011442087712924.44表示它是英国号码,2087712924是当地的一部分。

在实践中,长串MMMMM ...通常被分解成更小的部分以便于阅读。你如何做到这一点是针对具体国家的。我给出的例子通常写成+44 20 8771 2924。

除了上面明确的E.123表示,您可以在世界上允许国际拨号的任何地方使用它,每个国家也有自己的本地方法来表示数字,有些还有几个。示例编号有时会写为020 8771 2924或(020)8771 2924.严格来说,前导0不是区域代码的一部分(即20),而是交换机的信号,意思是“这里有一个数字可以走出当地“。偶尔会省略区号并且号码将被写入8771 2924.所有这些本地表示都不明确,因为它们可能代表多个国家/地区的有效数字,甚至可能代表同一国家/地区的多个部分中的有效数字。这意味着您应始终使用其国家/地区代码存储数字,并最好将其存储在E.123表示法中。特别要注意的是,电话号码不是数字。像05这样的数字与5相同。电话号码05 与5相同,存储系统将从数字中删除前导零。将电话号码存储为数据库中的CHAR或VARCHAR。

最后,有些奇怪。示例号码将由一些愚蠢的人写为0208 771 2924.这是可拨号的,但如果您假设它是区号而去掉前导0208,则余数无效作为本地号码。一些手机系统坏了的国家[北美瞪眼]有完全疯狂的系统,在某些地方,你必须拨打本地电话的所有10位数字,有些地方你一定不能,有些地方你必须拨打1NNN NNN NNNN,有些地方你不能包括领先的NNNN,依此类推。在所有这些情况下,存储数字为+ CC MMMMM ...是正确的。由实际拨打电话的人(或他们的拨号软件)决定如何将其转换为特定位置的可拨号数字序列。

答案 1 :(得分:0)

有很多当地国家的标准。在我的一个项目中,我遇到了同样的问题。解决方案:

  1. 在DB中存储为数字的所有内容:123456789
  2. 根据所选的网页语言,此页码在页面加载时预先格式化。
  3. 示例:

    • 法国,卢森堡的电话号码为12.34.56.78.90或12 34 56 78 90
    • 德国:123 45 67或123-45-67
    • 英国:020 1234 1234或1234 01234 12345
    • 意大利,荷兰:12 1234567或020-1234567
    • 独联体国家:123 123-45-67