使用Google libphonenumber获取与相同国家代码对应的国家名称

5
我该如何使用Google的libphonenumber https://github.com/googlei18n/libphonenumber 来判断一个电话号码是加拿大还是美国的,因为它们共享相同的国家代码?
例如: +1415-555-0123 是美国旧金山 +1647-555-0123 是加拿大多伦多
只需提供一个电话号码,即可获取国家名称。
当我尝试像下面这样做时,它返回了 "true",而我的期望是它应该返回false,因为这个电话号码不是美国号码,而是加拿大号码。
 PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
 boolean isPossible = phoneUtil.isPossibleNumber("+16475550123", "US");
2个回答

3
我意识到这是一个两步过程:
第一步:(首先检查它是否是可能的数字)
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
boolean isPossible = phoneUtil.isPossibleNumber("+16475550123", "US");

步骤2:(然后检查它是否适用于该地区)
Phonenumber.PhoneNumber number = phoneUtil.parse("+16475550123", "US");
 isValid = phoneUtil.isValidNumberForRegion(number, "US");

"isValid的值为false,因为647不是美国地区代码。"
"我们可以有类似以下的内容:"
String countries[] = {"US", "CA"};
String phoneNumber = "+13101234567";

for (String c : countries) {
            boolean isValid = phoneUtil.isPossibleNumber(phoneNumber, c);

            if (isValid) {
                try {
                    Phonenumber.PhoneNumber number = phoneUtil.parse(phoneNumber, c);
                    isValid = phoneUtil.isValidNumberForRegion(number, c);
                    if(isValid) {
                       System.out.println("Country is " + c);
                    }
                }catch(Exception e) {}
            }
        }

isPossibleNumber()仅检查国家代码和电话号码的长度,始终比isValidNumberForRegion()宽松。如果您的数据包含许多具有无效国家代码或无效电话号码长度的号码,则使用isPossibleNumber()进行预筛选以提高效率可能会很有用。另一方面,如果大多数数字具有有效的IDD代码并且符合IDD代码的有效长度,则直接调用isValidNumberForRegion()可能更有效。 - headuck

1
您可能正在查找 PhoneNumberUtil.isValidNumberForRegion()。根据其文档,它可以测试电话号码是否适用于某个地区。请注意,这并不验证号码实际上是否在使用中,仅通过查看号码本身无法确定。如果国家呼叫代码与该地区的国家呼叫代码不同,则会立即退出并返回false。在此之后,会检查该地区的特定数字模式规则。这对于确定特定号码是否适用于加拿大而不仅仅是有效的NANPA号码非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接