【编程开发】之国际号码校验工具 Libphonenumber

一、Libphonenumber 简介


1、Libphonenumber 是什么

Libphonenumber 是谷歌公司开发的一款用于解析、格式化和校验国际手机号码的软件库,可用于 Java、C++ 和 JavaScript 中。

Libphonenumber 官方文档地址为:https://github.com/google/libphonenumber

2、国家代号与电话区号

国家代号(CountryCode)

国家代号,即国际域名缩写,是为了便于区分国家而使用的名称,由两个大写字母组成,比如,中国的代号为 CN,美国为 US

电话区号(AreaCode)

国际电话区号,即国际电信联盟根据 E.164 标准 分配给各国或特殊行政区的 代码。所有的号码都是前缀号,也就是说这些号码是用来“拨到”目的国家或特殊行政区。每一个国家还有一个前缀来“拨出”所在国家,这个前缀叫 国际冠码。比如,中国的国际电话区号为 86,美国的国际电话区号为 1

更多国家代号与电话区号可以参考我的另一篇博客:https://blog.csdn.net/aiwangtingyun/article/details/110940112


二、Libphonenumber 实战 - Java


1、引入依赖

<dependency>
    <groupId>com.googlecode.libphonenumber</groupId>
    <artifactId>libphonenumber</artifactId>
    <version>8.12.10</version>
</dependency>

2、校验号码是否有效

下面我们以瑞士号码校验为例:

import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
import org.junit.Test;

@Test
public void validatePhone() {
    // 校验的号码
    String swissNumberStr = "044 668 18 00";
    // 获取 PhoneNumberUtil 实例
    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
    try {
        // 解析号码
        PhoneNumber swissNumberProto  = phoneUtil.parse(swissNumberStr, "CH");
        // 校验号码
        boolean isVaild = phoneUtil.isValidNumber(swissNumberProto); // return true
        System.out.println("号码校验结果:" + isVaild); 
    } catch (NumberParseException e) {
        System.err.println("号码解析异常: " + e.toString());
    }
}

号码的校验使用的是 PhoneNumberUtil 工具类,一般都是获取该工具类的实例进行操作。校验号码前需要通过 号码字符串 + 国家代号 来解析成国际通过的号码,解析后生成 PhoneNumber 类的对象 swissNumberProto(PhoneNumber 是一个由 phonenumber.proto 生成的一个类) ,其包含如下数据:

{
  "country_code": 41,
  "national_number": 446681800
}

其中:

  • country_code 为国际电话区号;
  • national_number 为该号码对应的国际号码。

3、号码格式化

我们还可以对解析后的号码按不同标准进行格式化:

// 国际标准, 输出 "+41 44 668 18 00"
System.out.println(phoneUtil.format(swissNumberProto, PhoneNumberFormat.INTERNATIONAL));
// 国内标准, 输出 "044 668 18 00"
System.out.println(phoneUtil.format(swissNumberProto, PhoneNumberFormat.NATIONAL));
// E164标准, 输出 "+41446681800"
System.out.println(phoneUtil.format(swissNumberProto, PhoneNumberFormat.E164));

或者格式化成从其他国家打过来的格式:

// 格式化成从美国打过来的格式,输出 "011 41 44 668 18 00"
System.out.println(phoneUtil.formatOutOfCountryCallingNumber(swissNumberProto, "US"));

附录:

如果想要获取国际手机号码例子,可以参考这个网站:https://fakenumber.net/,这个网站提供了各个国家的手机号码生成例子。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值