通过手机号查询省份城市。

有两种方式:

一,通过发送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通过手机号查询地区信息相关推荐

  1. pc企业微信hook接口,通过手机号查询微信信息

    简要描述 通过手机号查询微信信息 操作码 102007 请求说明 参数名 必选 类型 说明 type 是 int 类型 searchKey 是 string 手机号 searchType 是 int ...

  2. java调用Linux查询各类信息脚本汇总

    神坑预警 如果采用shell或者命令行里执行命令的话,没有任何问题,但是如果采用字符串类型在java中调用的话会出现部分执行无返回结果的问题,其原因猜测是部分命令解析不了java中的空格以及| 等符号 ...

  3. java使用es查询地理位置信息

    1.引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>el ...

  4. java根据手机号获取微信信息_Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注: 这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. ...

  5. java通过手机号查询联系人_在java中如何根据手机号查询号码归属地

    标签: 1.maven项目中配置 com.googlecode.libphonenumber geocoder 2.15 com.googlecode.libphonenumber libphonen ...

  6. 用Java中的HashSet写一个学生管理系统(添加、删除、修改、查询学生信息)

    不废话,上代码: 先创建一个Student类: public class Student {private String id;private String name;private String m ...

  7. java微信天气查询接口,全国天气预报信息 API 接口

    全国天气预报信息 API 接口 精确到行政区的7日天气预报. 1. 产品功能 全国天气预报每隔 6 小时更新数据: 精确到行政区级别的天气预报数据: 提供最长 7 天的天气预报数据: 提供每日小时级别 ...

  8. [附源码]java毕业设计石林县石漠化信息查询分析系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. java查询城市区号,java根据手机号获取归属地

    引言 最近在做一个关于车新闻的项目,让弄个根据用户注册的手机号获取该用户手机号所在地区,刚刚听说感觉特别高大上,这也可以获得???于是就开始度娘..查了好多资料渐渐的明白了原理. 原理介绍 (1)先上 ...

最新文章

  1. 开发部署提速8倍!这款IDE插件了解一下?
  2. 大学生推荐书籍阅读【开阔视野、境界提升】
  3. ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
  4. 记一次曲折的后台getshell过程
  5. thymeleaf 学习笔记-基础篇(中文教程)
  6. 想转行人工智能?哈佛博士后有话说!
  7. python 示例_Python TextCalendar类别| pryear()方法与示例
  8. Nginx+Php-fpm+MySQL+Redis源代码编译安装指南
  9. 英语影视台词---无敌破坏王2大脑互联网(3)((Ralph)我们去喝根汁汽水吧)...
  10. catalyst 6500 安装配置
  11. 关于String a=new String(a)创建几个对象问题的正确答案
  12. 服务器mt核心bug修复,RHSA-2020:0374-重要: 内核 安全和BUG修复更新
  13. vue引入SuperMap超图 引入流程及报错处理
  14. 植物大战僵尸之修改阳光
  15. 文本标注开源系统Doccano、Label Studio、BRAT比较
  16. 自媒体平台数据统计分析爬虫之【趣头条】模拟登陆分析详解及数据统计接口详解
  17. getValueFromEvent和shouldUpdate
  18. 情人节程序员用HTML网页表白【嫦娥奔月(满屏泡泡)】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  19. 第二十二篇玩转【斗鱼直播APP】系列之弹出房间界面
  20. 做自适应网站专业乐云seo_网站建设技术很 棒乐云seo:SEO技术这碗青春饭,跪

热门文章

  1. NSA泄密事件之SMB系列远程命令执行漏洞及Doublepulsar后门全球数据分析
  2. 英雄联盟晋级赛时服务器维修,英雄联盟段位机制改动曝光,晋级赛被坑或将成为历史...
  3. 我的收藏----壁纸
  4. suse linux enterprise 11 密码,图解SUSE Linux Enterprise Server 11 SP4安装教程
  5. CVE-2022-1162 Gitlab 硬编码漏洞分析
  6. 堆漏洞挖掘——fastbin attack漏洞
  7. BZOJ2277 [Poi2011]Strongbox 【数论】
  8. Kotlin-简约之美-基础篇(三):基本控制语句
  9. java生成表格图片
  10. 为什么人生下来就有意识 人脑五大未解之谜