比较“手机号码”和/或国际格式

时间:2013-07-11 15:14:22

标签: c# asp.net regex asp.net-3.5

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

场景(仅针对该示例的ZA格式):

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

我收到的电话号码可能不同,例如+27827177982 = 27827177982 = 0827177982 - 号码的国际前缀为+27

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


请记住:

我不能仅针对1个区域进行转换。

是否有一种简单的方法来比较所有地区的手机号码?

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


我的想法:

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

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


非常感谢任何帮助

3 个答案:

答案 0 :(得分:8)

您可能需要考虑使用库。例如,Google的libphonenumber图书馆带有C#port being here。特别是,这两种方法值得研究(强调我的)

  

isNumberMatch - 获得两个数字是否可以的置信度   是一样的。

     

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

答案 1 :(得分:0)

在大多数国家/地区(美国是一个值得注意的例外),非国际号码以0开头,因此解决方案将类似于:

  • 如果国家/地区列在例外列表中,请特别处理。
  • ,否则
    • 如果第一个字符为0,请将其删除并添加国际国家/地区代码
    • 确保第一个字符为+

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

答案 2 :(得分: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....
}