Java手机号码归属地查询

通过手机号码返回该号码对应的省、市及运营商

涉及的jar包或pom依赖

  • libphonenumber
  • geocoder
  • carrier
  • prefixmapper

代码清单如下:

代码涉及PhoneUtilPhoneModel两个类:

PhoneUtil:手机号码归属地查询工具类(包含运行的main方法)

/*** 手机号归属地查询* 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);}/*** 根据手机号 获取手机信息模型* * <pre>* 若返回值为null,则说明该号码无效* </pre>* * @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("该号码无效");}}}

PhoneModel:手机号码信息模型

/*** 手机号码信息模型** @author 曾令鹏* @since 1.8* @version 2017年12月11日 曾令鹏*/
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;}}

运行结果:

Java手机号码归属地查询相关推荐

  1. java手机号归属地查询_【原创】Java实现手机号码归属地查询

    网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷. 总结一下这些缺陷: 1.要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属 ...

  2. java 手机号码归属地_【原创】Java实现手机号码归属地查询

    网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷. 总结一下这些缺陷: 1.要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属 ...

  3. 【原创】Java实现手机号码归属地查询

    网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷. 总结一下这些缺陷: 1.要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属 ...

  4. 14.4 手机号码归属地查询

    手机号码归属地查询 MobileAddressQuery Android通过调用Webservice实现手机号码归属地查询 注:http://webservice.webxml.com.cn/WebS ...

  5. java手机号归属地查询

    java手机号归属地查询 Maven 依赖 代码实现: 测试结果: 官方项目地址:https://github.com/google/libphonenumber/tree/master/java/l ...

  6. Android 调用webservice(ksoap-2-Android)手机号码归属地查询

    之前做过一次但是隔了一个月再做就有点忘了,果然好记性不如烂笔头!还是打算记一下. 现在网络上的一些有关这方面的文章都比较久远了虽然方法没错但是之前的网址都变了所以需要进行一些修改. 记录时间2016/ ...

  7. python手机版代码-Python手机号码归属地查询代码

    简单的一个例子,是以前用Dephi写的,前不久刚实现了一个在Python中使用Delphi控件来编写界面程序,于是趁热写一个类似的的查询方案. 本实例是通过www.ip138.com这个网站来查询的, ...

  8. C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过)

    C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过) C# 自动投票和手机号码归属地查询 - 简单程序源码分享(高手飘过) 如有转载,请注明出处: http://www.cnblogs ...

  9. 免费手机号码归属地查询

    /*** 手机号码归属地查询* @param $tel* @return string*/ function getLocation($tel) {// 过滤参数if ( !isPhoneNumber ...

最新文章

  1. 数据结构与算法--线性表(顺序表)
  2. java字符型转百分比_小数转换成百分比,转字符串
  3. hibernate 向数据库里设置了默认值的字段添加数据为null时失效的问题
  4. Java中的StringBuilder类功能详解
  5. 分子动力学模拟软件_功能玻璃专题——分子动力学模拟预测氧化钠含量对二元钠硅酸盐玻璃弹性模量的影响...
  6. C++输出一句话里面第一个单词并大写
  7. 方舟手游pvp服务器修改pvx,方舟生存进化手机版怎么玩pvx_方舟生存进化手机版pvx玩法规则介绍_好特网...
  8. js定时器异步请求时候 上一个请求没有响应时下一个请求已经开始_关于异步的理解...
  9. 华硕笔记本电池0%充不进电_华硕笔记本电池0%充不进电
  10. Win10x64-WDM设备驱动开发入门 - 第六章 VMware-Win10x64+WDK10+VS2015/2019环境搭建与双机调试
  11. 挖掘机液压控制系统实训QY-JXSX09
  12. 痞子衡嵌入式:超级下载算法RT-UFL v1.0在Segger Ozone下的使用
  13. mysql按照学生分组查询_MySQL分组查询
  14. 腾讯云快速增长背后 三大短板仍需补足
  15. 壞壞老婆VS傻傻老公
  16. VScode 中运行C++,并用g++命令、CMake、配置launch.josn和tasks.json来运行和调试可执行文件
  17. 使用Retrofit2封装适用于组件化项目的网络库
  18. python安装环境配置linux_[Python学习] Linux环境下的Python配置,必备库的安装配置...
  19. c++栈的学习( 括号匹配问题)
  20. Swiper图片垂直滑动

热门文章

  1. 初步使用计算机课件,小学信息技术的初步课件
  2. 网页前端:网页视频应用
  3. 想创建一个人名百度百科词条,但已经有相同重复的词条怎么办
  4. 计算机和网络的不同,为什么网吧的计算机和网络如此流畅,与家庭网络有什么区别?...
  5. 时间管理中的大道理与小行动
  6. 大型企业网络系统集成方案如何设计?
  7. 结点电压法的c语言实现,节点电压法 -电路分析 -电子发烧友网站
  8. andriod-概述
  9. 不同浓度氢氧化钠对硅晶片的优化
  10. c语言loadimage函数参数,LoadImage函数与FromFile函数