我正在接收移动设备的电话号码,格式与国际格式不同。
场景(仅针对该示例的ZA格式):
数据库中的注册号码始终为国际格式:+27827177982
我收到的电话号码可能不同,例如+27827177982
= 27827177982
= 0827177982
- 号码的国际前缀为+27
即使我没有收到国际格式,我如何将其与国际格式相匹配???
请记住:
我不能仅针对1个区域进行转换。
是否有一种简单的方法来比较所有地区的手机号码?
前缀数量范围参考:http://en.wikipedia.org/wiki/List_of_country_calling_codes
我的想法:
比较数字的最后9个字符,这将排除区域前缀...但每个区域是否只有'9个字符,不包括前缀'?
循环通过数据库比较几次电话号码,例如检查最后9个号码 - 如果不匹配 - 检查最后10个等等(但可能导致不必要的匹配)
非常感谢任何帮助
答案 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....
}