java通过手机号查询地区信息
通过手机号查询省份城市。
有两种方式:
一,通过发送url请求获取信息。此方法在遍历手机号查询时效率很低。
private String getProvinceName(String phoneNum){//淘宝网的API地址String urlString = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel="+ phoneNum;StringBuffer sb = new StringBuffer();BufferedReader buffer;URL url = null;try {url = new URL(urlString);} catch (MalformedURLException e) {e.printStackTrace();}String province = "";try {//获取URL地址中的页面内容InputStream in = url.openStream();// 解决乱码问题buffer = new BufferedReader(new InputStreamReader(in, "gb2312"));String line = null;//一行一行的读取数据while ((line = buffer.readLine()) != null) {sb.append(line);}in.close();buffer.close();String retJson = sb.toString();if(retJson!= null && retJson.length() > 0 && retJson.indexOf("=") != -1){retJson = retJson.substring(retJson.indexOf("=")+1);province = JSONObject.parseObject(retJson).getString("province");}} catch (Exception e) {e.printStackTrace();}//从JSONObject对象中读取城市名称return province;
二,通过工具类查询。
在pom文件中导入依赖
<!--根据手机号查询地区 --><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>geocoder</artifactId><version>2.15</version></dependency><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>libphonenumber</artifactId><version>6.3</version></dependency><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>prefixmapper</artifactId><version>2.15</version></dependency><dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>carrier</artifactId><version>1.5</version></dependency><!--根据手机号查地区end-->
编写返回的model
public class PhoneModel {/** 省份名称 */private String provinceName;/** 城市名称 */private String cityName;/** 运营商:移动/电信/联通 */private String carrier;public String getProvinceName() {return provinceName;}public void setProvinceName(String provinceName) {this.provinceName = provinceName;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}public String getCarrier() {return carrier;}public void setCarrier(String carrier) {this.carrier = carrier;}
}
编写工具类
import com.google.i18n.phonenumbers.PhoneNumberToCarrierMapper;
import com.google.i18n.phonenumbers.Phonenumber;
import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
import com.xhks.dto.PhoneModel;import java.util.Locale;public class PhoneNumberUtil {/** 直辖市 */private final static String[] MUNICIPALITY = { "北京市", "天津市", "上海市", "重庆市" };/** 自治区 */private final static String[] AUTONOMOUS_REGION = { "新疆", "内蒙古", "西藏","宁夏", "广西" };private static com.google.i18n.phonenumbers.PhoneNumberUtil phoneNumberUtil = com.google.i18n.phonenumbers.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;}
}
调用工具类的getPhoneModel方法回去model
PhoneModel phoneModel = PhoneNumberUtil.getPhoneModel(callLogDtos.get(i).getPhoneNumber());
入参:手机号;
出参:PhoneModel。
通过PhoneModel获取省份,城市。
java通过手机号查询地区信息相关推荐
- pc企业微信hook接口,通过手机号查询微信信息
简要描述 通过手机号查询微信信息 操作码 102007 请求说明 参数名 必选 类型 说明 type 是 int 类型 searchKey 是 string 手机号 searchType 是 int ...
- java调用Linux查询各类信息脚本汇总
神坑预警 如果采用shell或者命令行里执行命令的话,没有任何问题,但是如果采用字符串类型在java中调用的话会出现部分执行无返回结果的问题,其原因猜测是部分命令解析不了java中的空格以及| 等符号 ...
- java使用es查询地理位置信息
1.引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>el ...
- java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例
本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...
- java通过手机号查询联系人_在java中如何根据手机号查询号码归属地
标签: 1.maven项目中配置 com.googlecode.libphonenumber geocoder 2.15 com.googlecode.libphonenumber libphonen ...
- 用Java中的HashSet写一个学生管理系统(添加、删除、修改、查询学生信息)
不废话,上代码: 先创建一个Student类: public class Student {private String id;private String name;private String m ...
- java微信天气查询接口,全国天气预报信息 API 接口
全国天气预报信息 API 接口 精确到行政区的7日天气预报. 1. 产品功能 全国天气预报每隔 6 小时更新数据: 精确到行政区级别的天气预报数据: 提供最长 7 天的天气预报数据: 提供每日小时级别 ...
- [附源码]java毕业设计石林县石漠化信息查询分析系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- java查询城市区号,java根据手机号获取归属地
引言 最近在做一个关于车新闻的项目,让弄个根据用户注册的手机号获取该用户手机号所在地区,刚刚听说感觉特别高大上,这也可以获得???于是就开始度娘..查了好多资料渐渐的明白了原理. 原理介绍 (1)先上 ...
最新文章
- 开发部署提速8倍!这款IDE插件了解一下?
- 大学生推荐书籍阅读【开阔视野、境界提升】
- ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
- 记一次曲折的后台getshell过程
- thymeleaf 学习笔记-基础篇(中文教程)
- 想转行人工智能?哈佛博士后有话说!
- python 示例_Python TextCalendar类别| pryear()方法与示例
- Nginx+Php-fpm+MySQL+Redis源代码编译安装指南
- 英语影视台词---无敌破坏王2大脑互联网(3)((Ralph)我们去喝根汁汽水吧)...
- catalyst 6500 安装配置
- 关于String a=new String(a)创建几个对象问题的正确答案
- 服务器mt核心bug修复,RHSA-2020:0374-重要: 内核 安全和BUG修复更新
- vue引入SuperMap超图 引入流程及报错处理
- 植物大战僵尸之修改阳光
- 文本标注开源系统Doccano、Label Studio、BRAT比较
- 自媒体平台数据统计分析爬虫之【趣头条】模拟登陆分析详解及数据统计接口详解
- getValueFromEvent和shouldUpdate
- 情人节程序员用HTML网页表白【嫦娥奔月(满屏泡泡)】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
- 第二十二篇玩转【斗鱼直播APP】系列之弹出房间界面
- 做自适应网站专业乐云seo_网站建设技术很 棒乐云seo:SEO技术这碗青春饭,跪
热门文章
- NSA泄密事件之SMB系列远程命令执行漏洞及Doublepulsar后门全球数据分析
- 英雄联盟晋级赛时服务器维修,英雄联盟段位机制改动曝光,晋级赛被坑或将成为历史...
- 我的收藏----壁纸
- suse linux enterprise 11 密码,图解SUSE Linux Enterprise Server 11 SP4安装教程
- CVE-2022-1162 Gitlab 硬编码漏洞分析
- 堆漏洞挖掘——fastbin attack漏洞
- BZOJ2277 [Poi2011]Strongbox 【数论】
- Kotlin-简约之美-基础篇(三):基本控制语句
- java生成表格图片
- 为什么人生下来就有意识 人脑五大未解之谜