1、需求

用户注册了了app就可以收到很多的手机号,从而可以根据手机号码可以该位用户是属于哪个区域,从而可以分析出哪个区域的用户量最大,可以进行组织活动,来推广自己的产品。

2、创建项目

创建一个普通的maven项目即可。

  • 项目依赖
<dependencies><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>libphonenumber</artifactId><version>8.8.8</version></dependency><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>geocoder</artifactId><version>2.85</version></dependency><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>carrier</artifactId><version>1.75</version></dependency><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>prefixmapper</artifactId><version>2.85</version></dependency></dependencies>
  • Java代码

1、PhoneUtil.java


import com.google.i18n.phonenumbers.PhoneNumberToCarrierMapper;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;import java.util.Locale;/*** 手机号码归属地查询* 项目地址: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.PhoneNumber pn = new Phonenumber.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.PhoneNumber pn = new Phonenumber.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.PhoneNumber pn = new Phonenumber.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("1894****489");if (phoneModel != null) {System.out.println(phoneModel.getProvinceName());System.out.println(phoneModel.getCityName());System.out.println(phoneModel.getCarrier());} else {System.err.println("该号码无效");}}}

2、PhoneModel.java

/*** 手机号码信息模型** @author * @since 1.8* @version */
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;}}

3、运行结果

安徽
芜湖市
电信

阿龙学堂-Java手机号码归属地查询相关推荐

  1. Java手机号码归属地查询

    Java手机号码归属地查询 通过手机号码返回该号码对应的省.市及运营商 涉及的jar包或pom依赖 libphonenumber geocoder carrier prefixmapper 代码清单如 ...

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

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

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

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

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

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

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

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

  6. java手机号归属地查询

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

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

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

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

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

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

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

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

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

最新文章

  1. 刚入职,就被各种 Code Review,真的有必要吗?
  2. C#列出局域网中可用SQL Server服务器(续)
  3. mysql dba失业_DBA要失业了?AI优化水平超DBA老炮儿
  4. JZOJ__Day 2:【NOIP普及模拟】和谐数
  5. BeginnersBook Kotlin 教程
  6. MapControl与PageLayoutControl联动
  7. 如何使用GitHub客户端
  8. 【PPT】学术答辩163套模板
  9. 一文掌握步进电机控制
  10. [Java进阶] Swing两万字大总结一(超详细教程,这不得收藏一波)
  11. 白纸不够白,签名照片还需要ps去除背景?Python大法半完美解决电子签名背景问题(20行代码去除签名背景)
  12. mkfs.ext3 快速格式化_求救!固态硬盘格式化不了!
  13. html+字体有白色的重影+重影字体设置,LCD显示器显示模糊与字体有重影是什么原因...
  14. L1-7 机工士姆斯塔迪奥 (20 分),C语言
  15. C++后台开发面试题总结(涉及C++基础、多线程多进程、网络编程等)
  16. 如何重置Mac的蓝牙模块以解决连接问题
  17. Excel删除重复数据java_合并Excel范围中的数据,删除空白和重复项
  18. 安徽师范大学计算机学院在哪个校区,2021年安徽师范大学皖江学院有几个校区,大一新生在哪个校区...
  19. 小白也可以学会小爱同学语言控制灯
  20. 浮动按钮FloatingActionButton

热门文章

  1. 禁忌搜索算法求解 TSP 问题的代码示例
  2. 阿里巴巴代码规范考试
  3. 论文 | 科研软件 —— SPSS Statistics V26.0安装及注册教程
  4. 获取服务器的wsdl文件,vb.net根据wsdl文件生成WebService服务器端代码
  5. HTTP报文格式详解
  6. C在mac上用不了malloc.h头文件的解决方法
  7. 用计算机算出你的年龄,身体年龄计算器:一分钟算出你的健康年龄(全文)
  8. 三星980 NVMe SSD推出:首款不含 DRAM 的消费类硬盘
  9. RT-Thread在正点原子Apollo上为 QSPI FLASH W25Q256移植FATFS文件系统
  10. mongodb java 教程_MongoDB Java | 菜鸟教程