9

我从移动设备接收电话号码,格式与国际格式不同。

场景(ZA 格式仅用于示例):

数据库中的注册号码始终为国际格式:+27827177982

我收到的号码可能会有所不同,例如+27827177982= 27827177982= 0827177982- 号码的国际前缀是+27

即使我没有收到国际格式,我如何将其与国际格式匹配???


请记住:

我不能只为 1 个区域进行转换。

有没有一种简单的方法可以比较所有地区的手机号码?

字符参考量的前缀范围:http ://en.wikipedia.org/wiki/List_of_country_calling_codes


我的想法:

  • 比较数字的最后 9 个字符,这将排除区域前缀......但是每个区域都只有“不包括前缀的 9 个字符”吗?

  • 循环通过数据库比较电话号码几次,例如检查最后 9 个号码 - 如果不匹配 - 检查最后 10 个等(但可能导致不需要的匹配)


任何帮助将不胜感激

4

3 回答 3

9

您可能需要考虑为此使用库。例如,带有 C#端口的 Google 的libphonenumber库位于此处。特别是,这两种方法可能值得研究(强调我的)

isNumberMatch - 获取两个数字是否相同的置信度。

getExampleNumber/getExampleNumberByType - 为所有国家/地区提供有效的示例号码,并可选择指定需要哪种类型的示例电话号码。

于 2013-07-11T15:18:55.813 回答
0

在大多数国家(美国是一个明显的例外),非国际数字以 0 开头,因此解决方案类似于:

  • 如果该国家/地区在例外列表中,请特别处理。
  • 除此以外
    • 如果第一个字符是0,删除它并添加国际国家代码
    • 确保第一个字符是+.

对此没有任何简单的答案,因为没有国际规定的规则,也没有电话号码的工作方式。

于 2013-07-11T15:19:07.487 回答
0

这样的事情怎么样。这是在我脑海中写下的:

string sourcePhoneNumber = "....";
string phoneNumber = "....";

int baseRegionCountryCode = 44;

if (phoneNumber.StartsWith("0") && !phoneNumber.StartsWith("00"))
{
    phoneNumber = phoneNumber.SubString(0, 1);
    phoneNumber = String.Format("{0}{1}", baseRegionCountryCode, phoneNumber);
}
else if (phoneNumber.StartsWith("+"))
{
    phoneNumber = phoneNumber.Replace("+", "00");
}

if (sourcePhoneNumber == phoneNumber)
{
    // do something awesome....
}
于 2013-07-11T15:32:40.817 回答