Sup*_*tar 16 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
然后不同的国家以不同的方式表示数字:
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
如您所见,用户可以看到有效电话号码的方式几乎是无限的(英国电话号码的维基百科页面长度接近100个打印机页面).我希望我的数据库中的所有数字都是普遍可识别的格式.据我所知,ISO没有定义的格式.电话号码有标准符号吗?
DrH*_*yde 48
没有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 A号码是相同的5电话号码05是不一样5,和存储系统将从数字剥离前导零.将电话号码存储为数据库中的CHAR或VARCHAR.
最后,有些奇怪.示例号码将由一些愚蠢的人写为0208 771 2924.这是可拨号的,但如果您假设它是区号而去掉前导0208,则余数无效作为本地号码.一些电话系统坏了的国家[北美瞪眼]有完全疯狂的系统,在某些地方你必须拨打本地电话的所有10位数字,有些你不能拨打,有些你必须拨打1NNN NNN NNNN,有些你在哪里不得包括领先者,依此类推.在所有这些情况下,将数字存储为+ CC MMMMM ...是正确的.由实际打电话的人(或他们的拨号软件)决定如何将其转换为特定位置的可拨号数字序列.