需要帮助创建动态 phone 数字检测器?

Need help creating a dynamic phone number detector?

情况如下:我的应用程序的用户将仅使用他们的 phone 号码创建他们的帐户(例如 WhatsApp)。所以没有用户名、密码或类似的东西。我将在验证后将这些 phone 号码存储在我的数据库中,因此我知道所有存储的号码都将采用一种特定格式。

然而,棘手的部分是我希望我的应用程序查看我用户的联系人,看看他们的联系人是否在我的应用程序的服务器上有一个帐户。理论上,我只是想让应用程序检查 phone 号码并查看它是否存在于我的数据库中,因为我很确定 phone 号码是唯一的(唯一的)属性我的应用程序可以访问的联系人(如果我错了,请纠正我)。

我担心的是,每个聪明的phone 所有者都以自己的方式存储联系人的phone 号码。我的意思是,例如,一个人可能将联系人的 phone 号码存储在 'clean way' 中,国家代码和区号以及其他应在 [=26 中的所有内容=] 号码,像这样:+1 xxx xxx xxxx(我来自荷兰,我只是在猜测,如果这不是美国 phone 号码的样子,我向所有美国读者道歉) .其他人可能会存储他联系人 'quick way' 的 phone 号码,而没有任何国家代码或区号,例如:xxx xxx xxxx(无国家代码)甚至 xxx xxxx(无区号) .

这在一个国家(例如美国)已经是个问题,更不用说某人在他的 phone 中有来自其他国家(有自己的区号规则)的联系人的情况。某个人的联系人列表中的联系人可能仍在使用我的应用程序及其 phone 号码,但如果该人将他联系人的 phone 号码存储在 'quick way' 中,我的应用程序将无法在数据库中找到它。现在,我要么正在寻找联系人的替代唯一值,我也可以将其存储在我的数据库中以将其用作标识符(但我非常怀疑它是否存在),或者最好是一种使应用程序搜索的方法更动态一点,这样即使联系人列表中存储的号码与我数据库中存储的 phone 号码不同,它也会识别匹配的 phone 号码。

与其提供一些技术建议,我更愿意听取对世界各地的 phone 号码了解一两件事的人的意见。例如:只搜索联系人 phone 号码的最后 8 位数字是否明智,或者就世界其他地方可能重复的 phone 号码而言是否存在风险?只是想知道最安全的方法是什么...

顺便说一句:我正在构建的应用程序是用 Swift 3 编写的,我将通过 Apple 的联系人框架访问用户的联系人。

独特的代码很棘手 - 特别是当基于真实世界的数据时(通常非常嘈杂并且您可以想到更多例外)。

我同意 "last 8 digits" 会非常冒险。 相反,我要做的是弄清楚(或猜测)用户来自哪个国家,并始终将其与 phone 号码一起存储(即使用户不选择显示它)。

所以假设他们有一个国家/地区的地址 - 然后使用该国家/地区的国家/地区代码。如果他们不这样做,那就有一个 "default" 国家(美国经常被使用,虽然我真的很讨厌那个(我来自澳大利亚)。

请注意,您仍然会遇到错误和异常,但这意味着您可以做出有根据的猜测,如果 9123 4567 与 (+61) 9123 4567 相同。

还要注意以下事项:

  1. 有时不止一个人共享一个phone号码
  2. 有时一个人有不止一个phone号码