生活中经常遇到要根据手机号码查询手机的归属地或者其他信息,如下所示:
手机号码:15968833161
省份:浙江
城市:杭州
区号:0571
邮编:310000
移动公司名称:中国移动
卡类型:GSM
为此,本人闲得蛋疼的就写了段Java代码,通过网上现有的手机解析API获取手机详细信息。
设计思想:
用百度搜索了下,网上有个网址有API可以提供,详细信息见连接
http://api.showji.com/Locating/help.htm#IFRAME
本人是用HttpClient基于超链接的形式进行查询,例如
http://guishu.showji.com/search.htm?m=13900008888
下面详细解释下代码:
首先,我定义了一个手机对象,用来存储手机信息
package com.zhengtian.tools.bean.phone;
/**
* $Id: $
*
* @author zhengtian
* @time 2012-12-26
*/
public class MobilePhone {
// 移动手机号码
private long phone_number;
// 省份
private String province;
// 城市
private String city;
// 城市区号
private String city_code;
// 城市邮编
private long zip_code;
// 卡类型
private String card_type;
// 移动公司名称
private String corporation_name;
/**
* 输出手机详细信息
*
* @return
*/
public String getPhoneInfo() {
StringBuilder info = new StringBuilder();
info.append("手机号码:").append(phone_number).append("\n");
info.append("省份:").append(province).append("\n");
info.append("城市:").append(city).append("\n");
info.append("区号:").append(city_code).append("\n");
info.append("邮编:").append(zip_code).append("\n");
info.append("移动公司名称:").append(corporation_name).append("\n");
info.append("卡类型:").append(card_type).append("\n");
return info.toString();
}
public long getPhone_number() {
return phone_number;
}
public void setPhone_number(long phone_number) {
this.phone_number = phone_number;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCity_code() {
return city_code;
}
public void setCity_code(String city_code) {
this.city_code = city_code;
}
public long getZip_code() {
return zip_code;
}
public void setZip_code(long zip_code) {
this.zip_code = zip_code;
}
public String getCard_type() {
return card_type;
}
public void setCard_type(String card_type) {
this.card_type = card_type;
}
public String getCorporation_name() {
return corporation_name;
}
public void setCorporation_name(String corporation_name) {
this.corporation_name = corporation_name;
}
}
接着,是用HttpClient对手机号码进行解析,附件中tools-0.0.1-SNAPSHOT-sources.jar是源代码,tools_fat.jar是可执行jar包。phoneTools.rar是我自己用的Maven工程,有兴趣的朋友们,可以直接导入后查看代码和运行。如果朋友们需要重新打可运行的jar包,可以参考一下链接
http://zheng12tian.iteye.com/blog/1765626
下面讲解下解析手机号码的类,如下所示:
package com.zhengtian.tools.service.phone;
import java.io.IOException;
import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.lang.StringUtils;
import com.zhengtian.tools.bean.phone.MobilePhone;
import com.zhengtian.tools.util.JsonUtils;
/**
* 手机信息查询工具类,主要实现根据手机号码查询手机归属地等信息。
*
* @author zhengtian
* @time 2012-12-26
*/
public class MobilePhoneTool {
/**
* 手机信息查询全局变量
*/
// 手机信息查询网址
private static final String URL = "http://api.showji.com/Locating/www.showji.com.aspx";
/**
* 上网代理全局变量
*/
// 代理Host
private static final String proxyHost = "10.10.10.78";
// 代理端口
private static final int proxyProt = 8080;
// 代理用户名
private static final String proxyUserName = "zhengtian";
// 代理密码
private static final String proxyPassword = "4rfv.com";
/**
* 响应包编码方式
*/
private static final String responseCharset = "UTF-8";
private MobilePhone getMobilePhone(long phone_number) {
HttpClient client = new HttpClient();
// 设置代理
//setProxy(client, proxyHost, proxyProt, proxyUserName, proxyPassword);
// get方式
HttpMethod method = new GetMethod(URL);
try {
// 设置get参数
NameValuePair m = new NameValuePair("m", String.valueOf(phone_number));
NameValuePair output = new NameValuePair("output", "json");
method.setQueryString(new NameValuePair[] { m, output });
// 服务器返回的状态(200:ok)
int statusCode = client.executeMethod(method);
if (statusCode == 200) {
// 服务器返回的信息
String responseBody = new String(method.getResponseBody(), responseCharset);
if (StringUtils.isNotEmpty(responseBody)) {
JSONObject json = JSONObject.fromObject(responseBody);
return convertJsonToMobilePhone(json);
}
System.out.println("查询结果为空");
} else {
System.out.println("查询失败");
}
} catch (HttpException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 释放连接
method.releaseConnection();
}
return null;
}
/**
* 将json对象转换为MobilePhone
*
* @param json
* @return
*/
private MobilePhone convertJsonToMobilePhone(JSONObject json) {
if (JsonUtils.isNotEmpty(json)) {
MobilePhone phone = new MobilePhone();
// 获取手机号码
long mobile = JsonUtils.getLongValue(json, "Mobile");
phone.setPhone_number(mobile);
// 获取省份
String province = JsonUtils.getStringValue(json, "Province");
phone.setProvince(province);
// 获取城市
String city = JsonUtils.getStringValue(json, "City");
phone.setCity(city);
// 获取城市区号
String areacode = JsonUtils.getStringValue(json, "AreaCode");
phone.setCity_code(areacode);
// 获取邮编
long postcode = JsonUtils.getLongValue(json, "PostCode");
phone.setZip_code(postcode);
// 获取公司
String corp = JsonUtils.getStringValue(json, "Corp");
phone.setCorporation_name(corp);
// 获取sim卡类型
String card = JsonUtils.getStringValue(json, "Card");
phone.setCard_type(card);
return phone;
}
return null;
}
/**
* 设置代理
*
* @param client
* @param proxyHost
* @param proxyProt
* @param userName
* @param password
*/
private void setProxy(HttpClient client, String proxyHost, int proxyProt, String userName, String password) {
// 设置HTTP代理IP和端口
client.getHostConfiguration().setProxy(proxyHost, proxyProt);
// 代理认证
UsernamePasswordCredentials creds = new UsernamePasswordCredentials(userName, password);
client.getState().setProxyCredentials(AuthScope.ANY, creds);
}
public static void main(String[] args) {
long no = args != null && args.length > 0 ? Long.valueOf(args[0]) : 18658155313L;
if (args != null && args.length > 1) {
no = Long.valueOf(args[0]);
}
MobilePhoneTool phone = new MobilePhoneTool();
MobilePhone info = phone.getMobilePhone(no);
if (info != null) {
System.out.println(info.getPhoneInfo());
}
}
}
如果机器上有jdk的环境,那么可以直接用cmd运行tools_fat.jar,详细用法如下
- 大小: 31.5 KB
分享到:
相关推荐
首先,我们要明白手机号码的归属地信息通常包括运营商(如中国移动、中国联通、中国电信)以及省份和城市信息。这些数据并不存储在设备本地,而是需要通过网络查询第三方API或者数据库获取。因此,开发过程中需要...
在Android系统中,获取SIM卡运营商信息相对简单,但直接通过SIM卡获取手机号码的功能却存在一定的限制。这是因为出于隐私保护和安全考虑,Android系统并未开放直接读取用户手机号码的API接口。开发者通常可以通过...
在Android系统中,获取SIM卡号码以及运营商标识是移动应用开发中常见的需求,尤其是在涉及到通信功能或者个性化服务时。SIM卡(Subscriber Identity Module)包含了用户的运营商信息和一个唯一的国际移动用户识别码...
在Android开发中,获取网络和SIM卡信息是常见的需求,这涉及到系统服务的调用以及权限的管理。本文将详细讲解如何在Android应用中获取SIM卡信息,包括运营商名称、SIM卡ID(IMEI)、SIM序列号(IMSI)等,并简要提及...
Android 获取移动网络及SIM卡运营商信息,可获取到SIM卡国别、SIM卡序列号、SIM卡状态、运营商代号、手机制式等信息。获取各个数据项的值: listValues.add(tm.getDeviceId());//获取设备编号 listValues.add(tm...
首先,我们要明白“SIM卡运营商”指的是手机用户所使用的移动通信服务提供商,如中国移动、中国联通、中国电信等。这些运营商为用户提供手机号码并负责网络连接。在安卓系统中,通过编程接口(API)可以获取到SIM卡...
手机号码归属地查询支持全国最新的15X号段、18X号段的查询,自带数据库总量超过十八万五千条手机号码归属地信息,可以详细查询到手机号码的开户地信息,包括该号码所属省份、城市、长途区号以及该号码 SIM卡类型(仅...
在iOS开发中,获取国际手机区号是一项常见的需求,特别是在涉及到国际通信或者用户地理位置信息处理时。本资源“ios-获取国际手机区号.zip”提供了一个解决方案,帮助开发者能够便捷地获取不同国家和地区的手机区号...
在IT行业中,获取手机SIM卡运营商的信息是一项常见的需求,尤其在移动应用开发、数据分析和位置服务等领域。这个任务涉及到通信网络、操作系统API以及隐私保护等多个方面。以下将详细阐述相关知识点。 首先,SIM卡...
在安卓平台上,开发一个“安卓号码归属地获取模块”是为了帮助应用程序识别并处理手机号码的归属地信息,以及判断手机SIM卡的类型。这个模块通常用于提供服务,如电话拦截、营销定向、用户分析等。以下是一些核心...
手机号码归属地是指手机SIM卡登记的初始运营商所在地,通常与用户的实际居住地并不完全一致,但能提供一个大致的地理位置信息。它包括运营商(如中国移动、中国联通、中国电信)和对应的省份、城市信息。 描述中...
获取每个SIM卡的手机号码,同样需要使用`SubscriptionManager`。首先,获取所有活跃的`SubscriptionInfo`对象,然后从中提取电话号码。这里需要注意,有些SIM卡可能没有分配电话号码,因此需要进行异常处理: ```...
在Android平台上,获取手机的号码和运营商信息是常见的需求,特别是在开发涉及通信功能的应用时。以下是如何在Android中实现这一功能的详细步骤和相关知识点。 首先,为了获取手机号码和运营商信息,我们需要使用`...
5. **其他信息**:可能还包括区号、SIM卡类型、网络制式(2G、3G、4G、5G)等。 mdb数据库的优势在于它支持SQL查询,可以高效地进行数据检索和分析。例如,你可以快速找出某个城市的所有移动182号码,或者统计特定...
Android获取手机sim卡信息,包含手机平台,运营商等信息。
总结来说,获取运营商SIM卡信息是Android开发中的常见任务,通过`TelephonyManager`类可以方便地获取网络类型、运营商名称等信息,但需注意不同运营商网络类型的差异以及Android的权限管理。在实际应用中,确保兼容...
在这个"Android高级应用源码-SIM卡运营商(获取手机号码功能暂时无法实现).rar"压缩包中,我们可以推测这是一个专注于获取SIM卡信息,特别是运营商信息的应用。然而,值得注意的是,描述中提到获取手机号码的功能...
"sid手机号码归属地编号"可能指的是SIM卡识别号(Subscriber Identity Module Identifier,SID)与手机号码结合,用于追踪和管理移动设备的地理位置信息。下面将详细阐述这一主题。 首先,SIM卡是手机连接到移动...
4. **SIM卡座的多样性**:由于SIM卡广泛应用于各种移动通信设备中,如手机、平板电脑等,因此SIM卡座的设计也多种多样。这就要求在选择SIM卡座时,应根据具体的应用场景和设备类型来确定合适的尺寸和形状。 #### 四...