2010-06-23 106 views
2

我有使用下列方式联系人数据的应用程序:与国际电话号码处理iPhone上

  1. 从客户端发送短信
  2. 从我们的服务器发送短信
  3. 要将用户的电话号码上传到其他人可以匹配的数据库

这在美国很好,但国际化有一系列问题。这些是我的假设使其工作:

#1 - 从客户端发送短信很简单。逐字地使用地址簿中的号码(没有标准化),让操作系统找出它。如果他们可以通过给定号码拨打电话,他们可以发送短信(对吧?)

#2 /#3 - 从服务器发送短信更加复杂。大多数SMS API需要国际符号(“+”前缀和国家代码),而用户将在他们的联系人列表中具有各种具有各种前缀(区号,国家代码等)的本地和全球电话号码。因此这里需要正常化。在数据库中匹配用户的电话号码也需要标准化。

要正常化电话号码,我必须首先确定用户是否打算通过查找“+”“011”和“00”前缀来指定全局号码。如果是这样,我删除前缀,将其替换为“+”并使用该号码。

如果我认为这个号码是本地号码,我可以尝试自己的国家代码(启发式,不可靠)。这需要了解用户的默认国家代码。在iPhone上,我可以获取用户的首选区域(可选)和用户的MCC和MNC(取决于位置?)。我倾向于用户选择的国家代码,因为他们的大部分本地电话号码都是来自该国家的。

我相信这是我能做的最好的事情,无需解析整个数字并找出区号和其他组件。我假设大多数国家允许“0”作为他们自己的国家代码的前缀。

有意义吗?有没有更容易/更理智的方式来做到这一点?

回答

0

#1这是一个公平的假设,除非用户出国。

#2 /#3要做更可靠的规范化,您需要获取用户的粗略位置。这里的psudeo代码:

  • 如果数以“+”开始,离开它,因为是
  • 别人得到用户当前的国家(指this post):
    • 如果与country exit codes挞,替换成“+”
    • 如果与国家代码开始,添加一个“+”
    • :与一个“0”开始,替换成“+”
    • 否则,假定它是本地号码,添加区号和国家代码。由于这一个的复杂性,可能更容易提示用户输入一些信息,例如,他们当前的区号和国家代码,或他们的位置。