程序员相信电话号码的谎言 (2016)

2021-08-05 21:02:48

永久链接 考虑到电话号码无处不在以及它们存在的时间长短,令人惊讶的是程序员继续对它们做出的错误假设之多。有些人没有手机,或者在被问到时不想向您提供他们的电话号码。除非必要,否则不要要求用户提供电话号码,并尽可能尝试提供后备以适应这些用户。 EFTPOS终端、传真机、手机上网卡等部分设备可能不支持接听电话。此外,有些人不能用手机打电话。这可能是永久性的(例如听力障碍)、临时性的(暂时性听力损失)或情境性的(当用户处于嘈杂的环境中时)。提示:让用户清楚了解您使用电话号码的方式,并为他们提供设置偏好的选项。确保在尝试与用户通信之前查找此首选项。甚至在不久之前,手机还没有出现,一个家庭共用一个固定电话号码是很常见的。在世界的某些地方,这仍然是真实的,亲戚(甚至朋友)共享一个电话号码。许多电话服务(特别是对于企业)允许多个呼入呼叫或来自同一电话号码的呼出呼叫。今天有效的电话号码将始终有效。今天某种类型的电话号码(例如,移动电话)永远不会被重新分配给另一种类型。今天连接的电话号码明天可能会断开连接。今天可以免费拨打的号码明天拨打可能要花钱。电话公司可能决定通过在现有号码中插入数字来扩大可用电话号码的范围。

提示:不要存储电话号码的属性,例如有效性或类型。需要时再次从库中检查此信息。美国、加拿大和几个加勒比岛屿共享国家/地区呼叫代码 +1。俄罗斯和哈萨克斯坦共享+7。这些不是唯一的例子!截至目前(2016 年 3 月),可通过拨打塞尔维亚 (+381)、斯洛文尼亚 (+386) 或摩纳哥 (+377) 的国家代码,拨打争议领土和部分承认的科索沃州的电话,取决于获得号码的地点和时间。提示:使用电话小部件鼓励用户以国际格式输入他们的电话号码,以便可以清楚地理解它。有些号码只能在国内拨打。有些只能从一部分国家/地区内拨打,例如 +800 通用国际免费电话号码。有些可能只有在呼叫者是特定电信公司的订户时才能拨打。很多人仍然只有固定电话,通常无法发送或接收短信。提示:只要有可能,请尝试通过语音消息或语音提示呼叫这些用户来满足他们的需求。或者,如果您的服务需要发送短信,请验证该号码在用户提供后是否可以接收短信。

一些服务提供商支持向固定电话号码发送和接收短信。还有像Skype这样的在线服务可以发送和接收短信。某些号码可能需要不同的前缀,具体取决于: 您使用的运营商;您从/向哪个设备拨号;无论您是在特定地理区域内部还是外部。在巴西,要在内部但跨越特定地理边界拨打号码,必须明确拨打运营商代码以说明您将使用哪个运营商来支付通话费用。在尼泊尔,根据始发电话是移动电话还是固定电话,省略了国家格式中的前导零。在新西兰,即使号码与您在同一个区号区域内,您也需要拨打区号(例如 03),除非它“接近”(接近城市/地区边界的东西),在这种情况下它应该不会被拨打。提示:使用 formatForMobileDialling 获取用户应该在其移动电话上实际拨打的号码。在阿根廷,拨打国内的手机号码需要在区号之后本地号码之前插入数字“15”,并且需要去除国家代码(54)之后的“9”。这将 +54 9 2982123456 转换为 02982 15 123456。

在某些国家/地区,可以通过在号码后拨打更多数字来连接到不同的端点。因此,“12345678”可能无法与拨打“123456”到达同一个人。在某些国家/地区或某些手机上,多余的数字会被丢弃。因此,1-800-MICROSOFT 是一个无效数字 - 但它仍然连接到 Microsoft,因为任何后面的数字都被忽略。在某些国家/地区拨打“911 123”可以拨打“911”等号码:但在其他国家/地区则无法拨打。在其他国家/地区,运营商可能会“修复”无效号码,例如,如果他们知道它是移动号码,则添加移动令牌,以便连接。 ITU-T 规定电话号码不能超过 15 位数字,保留 1 到 3 位数字作为国家/地区呼叫代码,但在德国分配的有效号码比这更长。有许多“国家呼叫代码”发给非地理实体,例如卫星服务,以及通用国际免费电话号码的“800”代码。在以色列,某些广告编号以 * 开头。在新西兰,非紧急交通事故可以通过手机拨打*555进行报告。字母字符也可用于电话号码,例如 1-800-Flowers。电话号码在给定时间只有一个前缀(区号或国家目的地代码)

在冰岛 90 年代中期,电话号码从 5 位和 6 位数字变为 7 位数字。旧系统有地区前缀,但新系统没有。在过渡期间,电话号码可以通过旧区号或新的 7 位数号码(不同的前缀)到达。例如,雷克雅未克电话号码可以在区域内拨打 nnnnn 和 55nnnnn,在区域内拨打 91-nnnnn 和 55nnnnn。提示:在过渡期间,请确保通过电话号码查找支持两种形式的号码。如果发送消息/拨打受影响的号码,可能需要尝试新旧前缀。根据转换类型,您可能需要联系受影响的客户并要求他们更新他们的号码。从国外拨打时,国内使用格式的数字中的前导零总是可以丢弃在某些国家/地区,人们在国家/地区代码后的括号中写上国家前缀(通常为 (0)),以表示在拨打国际电话时应将其丢弃。在意大利,自 1998 年以来,前缀被“固定”到电话号码上,因此 (01) 2345 变为 012345,并且(国际)拨打 +39012345(包括前导零)。提示:使用库来解析和格式化数字以正确处理每个国家/地区的问题。电话号码的国家或地区代码表示用户的位置、居住地、时区或首选语言。有人在其居住或持有公民身份以外的州或地区发布电话号码的原因有很多。

在一个国家/地区内移动:在电话号码可携带的国家/地区,您可能会在移动时保留您的号码,即使在某些情况下,如果它是固定电话号码并且即使它有区号(参见 xkcd 以获取美国示例)。另一个国家:有些人在搬到另一个国家时会保留手机。企业、家人和朋友:一家企业可能在邻国有很多客户,或者一个人在那里可能有很多家人和朋友。想要更便宜的费用:VoIP 通常比普通电话便宜。在欧洲旅行的人可能会从一个国家获得一张 SIM 卡并有漫游计划。提示:程序员不应仅仅因为某个电话号码属于另一个国家而禁止用户注册该电话号码。在调用诸如 isValidNumberForRegion 之类的方法时应该小心,这才是真正想要的。如果您有电话输入小部件,请确保您允许以国际格式输入号码(即允许 + 号),以便人们可以使用国际联系号码进行注册。国际格式电话号码前面的加号是可选的,也可以随时替换为00。加号是国际电话号码E.164格式的一部分。拨打国际长途时,可替换为国际长途电话前缀。请注意,虽然 00 是常见的国际电话前缀,但这实际上因国家/地区而异。

在国家/地区代码为 +1 的北美,将 + 放在号码前并将其写成 1-555-123-4567 是一个常见错误。这在技术上是不正确的。从日本拨打这个号码,国际电话前缀是 010,可以拨打 +1 555 123 4567 或 010 1 555 123 4567。一些用户使用他们的联系人列表来存储诸如生日或其他信息之类的信息。除非一条用户提供的数据实际上已被验证为电话号码,否则应按用户输入的原样存储。切勿尝试将电话号码存储为 int 或任何其他类型的数字数据类型。您不能对它们进行算术运算,虽然 007、07 和 7 是相同的数字,但它们不一定是相同的电话号码 - 在某些国家/地区,前导 0 很重要并且构成数字本身的一部分(请参阅格式化的数字中的前导零国内使用时,从国外拨号时总是可以丢弃)。此外,电话号码可能包含其他可拨打的字符(请参阅电话号码仅包含数字)或扩展部分,在等待提示音后拨打。提示:使用库来解析和格式化数字以正确处理每个国家/地区的问题。国家编号计划,例如由国际电联管理的计划,代表政府或电信的意图。这些可能会在现实世界中编号计划更改的实际实施之前、期间或之后发布。电话号码范围生效的实际日期可能并不总是以官方公告为准。