在您说这已经被问过之前,请知道我已经审核了这些内容:
说我正在制作一个必须保存和解析电话号码的程序,我想确保它们以标准格式保存,所以其他程序也可以解析它们。
例如,我看到以下所有内容都是同一美国电话号码的有效陈述:
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
然后不同的国家以不同的方式代表数字:
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
正如您所看到的,用户可以看到有效电话号码的方式几乎是无限的(Telephone numbers in the UK的维基百科页面长度接近100个打印机页面)。我希望我的数据库中的所有数字都是普遍可识别的格式。据我所知,ISO没有定义的格式。 电话号码是否有标准符号?
答案 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)
有很多当地国家的标准。在我的一个项目中,我遇到了同样的问题。解决方案:
示例: