所需pom依赖:

com.googlecode.libphonenumber

libphonenumber

8.0.0

com.googlecode.libphonenumber

geocoder

2.82

com.googlecode.libphonenumber

carrier

1.72

这是所需的实体类:

public class PhoneModel {

/** 省份名称 */

private String provinceName;

/** 城市名称 */

private String cityName;

/** 运营商:移动/电信/联通 */

private String carrier;

/**

* 省份名称

*

* @return 获取provinceName属性值

*/

public String getProvinceName() {

return provinceName;

}

/**

* 省份名称

*

* @param provinceName

* 设置 provinceName 属性值为参数值 provinceName

*/

public void setProvinceName(String provinceName) {

this.provinceName = provinceName;

}

/**

* 城市名称

*

* @return 获取cityName属性值

*/

public String getCityName() {

return cityName;

}

/**

* 城市名称

*

* @param cityName

* 设置 cityName 属性值为参数值 cityName

*/

public void setCityName(String cityName) {

this.cityName = cityName;

}

/**

* 运营商:移动/电信/联通

*

* @return 获取carrier属性值

*/

public String getCarrier() {

return carrier;

}

/**

* 运营商:移动/电信/联通

*

* @param carrier

* 设置 carrier 属性值为参数值 carrier

*/

public void setCarrier(String carrier) {

this.carrier = carrier;

}

}

代码实现和测试:

/**

* 手机号归属地查询

* jar依赖:com.googlecode.libphonenumber(Libphonenumber、Geocoder、Prefixmapper

* 、Carrier) pom依赖:http://mvnrepository.com/search?q=libphonenumber

* 项目地址:https://github.com/googlei18n/libphonenumber

*

*/

public class PhoneUtil {

/** 直辖市 */

private final static String[] MUNICIPALITY = { "北京市", "天津市", "上海市", "重庆市" };

/** 自治区 */

private final static String[] AUTONOMOUS_REGION = { "新疆", "内蒙古", "西藏",

"宁夏", "广西" };

private static PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil

.getInstance();

/** 提供与电话号码相关的运营商信息 */

private static PhoneNumberToCarrierMapper carrierMapper = PhoneNumberToCarrierMapper

.getInstance();

/** 提供与电话号码有关的地理信息 */

private static PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder

.getInstance();

/** 中国大陆区区号 */

private final static int COUNTRY_CODE = 86;

/**

* 根据手机号 判断手机号是否有效

*

* @param phoneNumber

* 手机号码

* @return true-有效 false-无效

*/

public static boolean checkPhoneNumber(String phoneNumber) {

long phone = Long.parseLong(phoneNumber);

PhoneNumber pn = new PhoneNumber();

pn.setCountryCode(COUNTRY_CODE);

pn.setNationalNumber(phone);

return phoneNumberUtil.isValidNumber(pn);

}

/**

* 根据手机号 判断手机运营商

*

* @param phoneNumber

* 手机号码

* @return 如:广东省广州市移动

*/

public static String getCarrier(String phoneNumber) {

long phone = Long.parseLong(phoneNumber);

PhoneNumber pn = new PhoneNumber();

pn.setCountryCode(COUNTRY_CODE);

pn.setNationalNumber(phone);

// 返回结果只有英文,自己转成成中文

String carrierEn = carrierMapper.getNameForNumber(pn, Locale.ENGLISH);

String carrierZh = "";

switch (carrierEn) {

case "China Mobile":

carrierZh += "移动";

break;

case "China Unicom":

carrierZh += "联通";

break;

case "China Telecom":

carrierZh += "电信";

break;

default:

break;

}

return carrierZh;

}

/**

* 根据手机号 获取手机归属地

*

* @param phoneNumber

* 手机号码

* @return 如:广东省广州市

*/

public static String getGeo(String phoneNumber) {

long phone = Long.parseLong(phoneNumber);

PhoneNumber pn = new PhoneNumber();

pn.setCountryCode(COUNTRY_CODE);

pn.setNationalNumber(phone);

return geocoder.getDescriptionForNumber(pn, Locale.CHINESE);

}

/**

* 根据手机号 获取手机信息模型

*

*

* 若返回值为null,则说明该号码无效

*

*

* @param phoneNumber

* 手机号码

* @return 手机信息模型PhoneModel

*/

public static PhoneModel getPhoneModel(String phoneNumber) {

if (checkPhoneNumber(phoneNumber)) {

String geo = getGeo(phoneNumber);

PhoneModel phoneModel = new PhoneModel();

String carrier = getCarrier(phoneNumber);

phoneModel.setCarrier(carrier);

// 直辖市

for (String val : MUNICIPALITY) {

if (geo.equals(val)) {

phoneModel.setProvinceName(val.replace("市", ""));

phoneModel.setCityName(val);

return phoneModel;

}

}

// 自治区

for (String val : AUTONOMOUS_REGION) {

if (geo.startsWith(val)) {

phoneModel.setProvinceName(val);

phoneModel.setCityName(geo.replace(val, ""));

return phoneModel;

}

}

// 其它

String[] splitArr = geo.split("省");

if (splitArr != null && splitArr.length == 2) {

phoneModel.setProvinceName(splitArr[0]);

phoneModel.setCityName(splitArr[1]);

return phoneModel;

}

}

return null;

}

public static void main(String[] args) {

PhoneModel phoneModel = PhoneUtil.getPhoneModel("13456555555");

if(phoneModel != null){

System.out.println(phoneModel.getProvinceName());

System.out.println(phoneModel.getCityName());

System.out.println(phoneModel.getCarrier());

}else{

System.err.println("该号码无效");

}

}

}

测试结果:

浙江

绍兴市

移动

java手机号分割_java 获取手机号归属地相关推荐

  1. 微信小程序登录-手机号授权并获取手机号

    做微信小程序时,记录实现微信小程序登录 这里已经获取用户openId和sessionKey 1.通过按钮触发手机号授权 必须要通过按钮触发授权,open-type='getPhoneNumber'不能 ...

  2. java string分割_java 字符串分割的三种方法(总结)

    最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方 ...

  3. java 验证手机号格式_java 校验手机号格式

    主要用到这两个包: import java.util.regex.Matcher; import java.util.regex.Pattern; Pattern类用于创建一个正则表达式,生成一个Pa ...

  4. java 获取手机归属地_java 获取手机归属地

    java 获取手机归属地 [2021-01-30 20:46:44]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/( ...

  5. java 取字段_java – 获取字段的名称

    在 Java中可以从实际字段获取字符串中的字段名称吗?喜欢: public class mod { @ItemID public static ItemLinkTool linkTool; publi ...

  6. java随机数转换_Java获取随机数的3种方法(转)

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  7. java处理最后一周_Java获取某年某周的最后一天

    package test; import java.text.SimpleDateFormat; import java.util.Calendar; /** * ClassName: LastDay ...

  8. java 图片分割_Java atlas图集分割

    java版本的图集分割 atlasFilePath : 图集配置文件 imageFilePath :图集文件 outPath :输出文件夹 图片读取 图片裁剪 图片存储 StringUtil.pars ...

  9. java 绝对路径_java 获取绝对路径

    1.利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//use ...

最新文章

  1. 添加面部跟踪和实时识别到您的Android应用程序
  2. BZOJ3993: [SDOI2015]星际战争
  3. Linux bashrc和profile的用途和区别
  4. 官宣!“一流大学”,异地落户!
  5. 十八般武艺玩转GaussDB(DWS)性能调优(二):坏味道SQL识别
  6. Android P 消息
  7. 处理11gR2 RAC集群资源状态异常INTERMEDIATE,CHECK TIMED OUT
  8. 3dsll 新大三 误删fbi不能安装游戏解决之路
  9. rosbridge入门教程
  10. 世卫组织使用的GIS软件是哪款?
  11. 华为nova青春版是html手机吗,华为Nova青春版这款手机作为新青年良品:麒麟935+4G+64GB+18W快充...
  12. 基于HTML5气3D仿真培训系统
  13. iPhoneX适配问题 iOS刘海屏 安全区域处理 IOS小黑条处理 IOS兼容处理
  14. REVIT建模“族类别和族参数”中的“总是垂直”“基于工作平面”怎么用?
  15. C++ 测试CFile读写文本
  16. c语言来自不兼容指针类型的分配,c - 为什么我会收到“警告:来自不兼容指针类型的分配”? 结构数组中的双链表 - 堆栈内存溢出...
  17. 头肩底形态是什么?外汇交易员如何使用头肩底应对2019年熊市
  18. Python机器学习案例|梵高的《星空》图片压缩
  19. 亚马逊云科技Build On - Serverless创新零售初体验
  20. 学习SOC--RTL代码编写指南

热门文章

  1. linux 权限mod,linux学习—权限管理
  2. mysql where varchar_MySQL数据库之MySQL索引使用:字段为varchar类型时,条件要使用''包起来...
  3. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)
  4. iOS多线程编程的知识梳理
  5. 基于php-fpm的配置详解
  6. DNS全局负载均衡(GSLB)基本原理
  7. Jquery .net MVC
  8. 一步一步教你在CentOS6.0下安装NS2(ns-allinone-2.34.tar.gz)模拟仿真工具
  9. Jquery Uploadify插件+Servlet解决FTP多文件上传
  10. bootstrap-multiselect.js多选下拉框初始化时默认选中初始值