2

这个问题不是特定于 Android 的,但我已经包含了标签。

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

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

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

我期待像电话号码哈希这样的东西,代表相同号码的两个输入将在这种“标准形式”中产生相同的结果,并且可以拨打这种标准形式并且很好。我认为所有各种 +s 之类的都是这种标准形式的简写。

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

我知道有些东西的意思是“当前区域”(或国家),这就是为什么固定电话可以省略区号的原因,我希望有一个函数可以返回当前位置的格式(但这不适用于手机,如果它例如,是预先设置区号的固定电话,这将(更接近)我一直假设存在的“标准表格”)

我很确定存在一些完整的电话号码形式,考虑电话系统的工作原理(我推断我承认)应该有一个表格可以在整个星球上唯一标识一个号码,当这不是情况下(例如从没有区号的固定电话拨打本地电话),这是一种优化。

所以我有两个问题:

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

是否有任何 ISO(/IEC?)(O 代表什么?)标准文件以及向公众开放的草案?我已经阅读了 Wikipedia 页面(很久以前,我花了很多时间进行 wiki 浏览,并打开了数百个标签),但它涵盖了历史或一些有关格式的信息),我想了解更多关于这件事的信息我认为理所当然已经有 8 年左右的时间了。

此外,为什么 Windows Phone 8 是一个标签?让 12 位骄傲的 Lumina 拥有者不感到被冷落?(建议作为标签!)

附录

不幸的是,android中任何用于规范电话号码的API都没有解决方案(这包括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 等的解决方案。

4

1 回答 1

3

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

  • 解析/格式化/验证世界所有国家/地区的电话号码。
  • getNumberType - 根据数字本身获取数字的类型;能够区分固定电话、移动电话、免费电话、收费费、分摊费用、VoIP 和个人号码(只要可行)。
  • isNumberMatch - 获取两个数字是否相同的置信度。
  • isPossibleNumber - 仅使用长度信息快速猜测一个号码是否是可能的电话号码,比完整验证快得多。
  • isValidNumber - 使用长度和前缀信息对区域的电话号码进行全面验证。
  • AsYouTypeFormatter - 当用户输入每个数字时,即时格式化电话号码。
  • PhoneNumberOfflineGeocoder - 提供与电话号码相关的地理信息。

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

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

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

于 2013-09-13T17:23:32.190 回答