是否可以检查给定的电话号码是否属于手机?

and*_*per 4 android phone-number libphonenumber

背景

可以使用此代码以及Google提供的PhoneNumberUtil库(此处提供)来检查给定字符串是否代表有效的电话号码:

public static boolean isValidNumber(final PhoneNumber phone) {
    if (phone == null)
        return false;
    final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
    return phoneNumberUtil.isValidNumber(phone);
}

public static boolean isValidPhoneNumber(String phone) {
    if (TextUtils.isEmpty(phone))
        return false;
    phone = phone.replaceAll("[^0-9]", "");
    final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
    PhoneNumber phoneNumber = null;
    try {
        phoneNumber = phoneNumberUtil.parse(phone, Locale.getDefault().getCountry());
    } catch (final Exception e) {
    }
    return isValidNumber(phoneNumber);
}
Run Code Online (Sandbox Code Playgroud)

问题

这只是一般性检查,但我无法确定是否可以知道电话号码是否实际上是移动设备.

我试过的

正如我在一些网站上看到的,上面的检查可能需要进行一些小的调整才能知道它是否属于移动设备,但根据我的测试,这是错误的:

    ...
    phone = phone.replaceAll("[^0-9]", "");
    if (phone.length() < 7)
        return false;
    ...
Run Code Online (Sandbox Code Playgroud)

这个问题

是否可以知道电话号码是否属于移动设备?

如果是这样,怎么样?

and*_*per 7

好像我错过了库中的功能.这是怎么做的:

public static boolean isValidMobileNumber(String phone) {
    if (TextUtils.isEmpty(phone))
        return false;
    final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
    try {
        PhoneNumber phoneNumber = phoneNumberUtil.parse(phone, Locale.getDefault().getCountry());
        PhoneNumberUtil.PhoneNumberType phoneNumberType = phoneNumberUtil.getNumberType(phoneNumber);
        return phoneNumberType == PhoneNumberUtil.PhoneNumberType.MOBILE;
    } catch (final Exception e) {
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

编辑:似乎有些数字(在美国和其他几个国家)无法确定它们是否属于手机.在这种情况下,返回FIXED_LINE_OR_MOBILE.

如果您仍然需要知道电话号码是否是移动电话,那么有在线服务可以查看(当然,他们不能全部知道),例如Pathfinder.