正确处理电话号码(存储,理想情况下使用独特的表格)

时间:2013-09-13 17:01:05

标签: android phone-number

此问题并非特定于Android,但我已添加了标记。

我需要能够以某种标准形式存储电话号码(理想情况下是字符串),可以快速测试/评估相等性(因此字符串是理想的)

我已经找到了一些答案,最好的答案指向http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html(我可以使用库为我做这件事)

但这还不够好,我已经尝试了各种格式编号,了解了可编辑工厂使用该类中的一些静态方法,但它们似乎没有返回我的形式期待。

我期待像电话号码哈希一样,两个输入代表相同的数字会产生相同的“标准格式”,并且可以拨打此标准格式并且没问题。我认为所有各种各样的+ s和诸如此类的东西都是这种标准形式的短手。

我不确定现在是否存在这样的事情。

据我所知,有些东西意味着“当前区域”(或国家),这就是为什么陆线可以省略区号,我期望一个功能可以返回当前位置的格式(但这不适用于手机,如果它是一个前置区域代码的地面线,例如,这将(更接近)我保持假设的“标准形式”)

我很确定存在一些完整的电话号码,考虑电话系统是如何工作的(我推断我承认)应该有一个表格可以识别整个星球上唯一的数字,当这个时候情况并非如此(例如来自没有区号的陆线的本地电话),这是一种优化。

所以我有两个问题:

如何将电话号码“扩展”为该号码的唯一字符串,以便将该号码(带空格,0或+44 ....)的任何替代形式“扩展”为此唯一号码?

是否有任何ISO(/ IEC?)(O代表什么?)标准文件,草案向公众开放?我已经阅读了维基百科页面(很久以前,我花了很多时间浏览wiki,并打开了数百个标签)但它包含了历史记录,或者有关格式化的一些信息),我想更多地了解这个事情。我现在已经习惯了大约8年左右。

此外,为什么Windows Phone 8是一个标签?为了让12位自豪的Lumina车主不被遗忘? (它被建议作为标签!)

附录

不幸的是Any API in android to normalize phone number那里没有解决方案(这包括libphonenumber),我寻找的内容导致了一些有趣的读物:

http://en.wikipedia.org/wiki/Panel_switch

http://en.wikipedia.org/wiki/Nonblocking_minimal_spanning_switch

http://en.wikipedia.org/wiki/Telephone_exchange

我仍然不能断定数字没有“完整形式”。

我不敢创建一个简单地将+44换成0等等的解决方案。

1 个答案:

答案 0 :(得分:3)

在阅读了您的问题之后,我被提醒了Google的名为libphonenumber的图书馆。它是谷歌的通用库,用于解析,格式化,存储和验证国际电话号码。它执行以下操作(其中一些似乎可以使用):

  • 解析/格式化/验证所有国家/地区的电话号码 世界的。
  • getNumberType - 获取基于的数字类型 数字本身;能够区分固定电话,移动电话,免费电话, 优惠费率,共享费用,VoIP和个人号码(无论何时 可行)。
  • isNumberMatch - 获得两个人的置信度 数字可能是一样的。
  • isPossibleNumber - 快速猜测数字是否可行 通过仅使用长度信息的音频,比a快得多 完全验证。
  • isValidNumber - 完整验证电话号码 对于使用长度和前缀信息的区域。
  • AsYouTypeFormatter - 当用户输入每个数字时,即时格式化电话号码。
  • PhoneNumberOfflineGeocoder - 提供与电话号码相关的地理信息。

就国际电话号码格式而言,E.164格式是国际电信联盟推荐的。它定义了全球公共交换电话网络的编号方案,是国际电话号码的一般格式(通常是+的统计数据,后跟国家代码,区号和号码)。

使用上述库,如果您提及国际代码和电话号码(美国和加拿大的示例1),则可以检查所有电话号码的有效性。如果您没有代码但是您知道要检查其编号的国家/地区名称,那么您也可以进行验证。您还可以使用此库转换1个标准E.164格式的所有有效数字。您还可以“扩展”该特定国家/地区的本地国家/地区格式的数字。您也可以将其另存为String。虽然它确实使用了您在问题中提到的PhoneNumberUtils

我不确定这是否是您正在寻找的,但我希望这些信息可以帮助您。