手机号码校验归属地

手机号码校验归属地

前言

最近公司有一个需求是校验公司产品的使用用户所属手机号码归属地分布情况。于是在网上找寻了一下发现github上libphonenumber类库非常符合自身的需求。Libphonenumber是Google 的通用 Java、C++ 和 JavaScript 库,用于解析、格式化和验证国际电话号码。Java 版本针对在智能手机上运行进行了优化,自 4.0 (Ice Cream Sandwich) 起就被 Android 框架使用。

Github:GitHub - google/libphonenumber: Google's common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers.

Libphonenumber三个核心包,分别为:Libphonenumber,Geocoder,Carrier

使用谷歌公共电话号码解析库

导入最新maven包(最新)

<dependency>
    <groupId>com.googlecode.libphonenumber</groupId>
    <artifactId>libphonenumber</artifactId>
    <version>8.12.38</version>
</dependency>
<dependency>
    <groupId>com.googlecode.libphonenumber</groupId>
    <artifactId>geocoder</artifactId>
    <version>2.174</version>
</dependency>

执行代码块:

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();

PhoneNumberOfflineGeocoder phoneNumberOfflineGeocoder = PhoneNumberOfflineGeocoder.getInstance();

String language ="CN";

String phoneNum = "13111111111";

Phonenumber.PhoneNumber referencePhonenumber = null;

  try {

    referencePhonenumber = phoneUtil.parse(phoneNum, language);

} catch (NumberParseException e) {

    e.printStackTrace();

}

String referenceRegion = phoneNumberOfflineGeocoder.getDescriptionForNumber(referencePhonenumber, Locale.CHINA);

  if(StringUtils.isEmpty(referenceRegion)){

    System.out.println("未知地域号码:"+phoneNum);

}

System.out.println("referencePhonenumber"+referencePhonenumber);

  //手机号码归属城市 referenceRegion

  System.out.println("referenceRegion"+referenceRegion);

libphonenumber原理

libphonenumber原理其实特别简单,首先根据当前提供的手机号码以及区域信息转成phoneNumber对象,如我国用“CN“代替,并对应的是86大陆区号。然后根据该对象信息去对应的86.txt文件中索引匹配。

https://github.com/google/libphonenumber/tree/master/resources/geocoding/zh

不足11位的手机号码是无法找到对应的区域,若满足以上条件(区域+11位号码)就会根据前匹配找数据。就算用户输入的是字符,也会转成数字。比如“131xxxxxxxx“就会转成”13199999999“。需要注意的一点是86.txt更新时间为3年以前,如果有新号码格式就会出现匹配不正确的情况。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值