程序员在上海之三
2016-10-15 00:18
204 查看
今天在公司的任务是完成定时任务激活老用户发短息功能上线,其实这个功能在昨天就已经完成了,由于运维同事在发布的时候漏掉了,导致今天在查看日志的时候没有看到 ,有点出乎意料,我的代码明明很简洁明了功能明确!为什么会有这样的问题?只好查询版本才发现线上没有发布我的最新代码,好吧~问题找到了,现在有一个两全的方法,我们的admin系统有一个手动走定时任务的功能,花了几分钟添加上去测试OK~下午上线。
工作描述基本结束了,下面是个人今天的技术分享:我们都知道网上有很多页面可以根据身份证查询归属地、性别、出生日期等;根据手机号码查询归属地。可是具体它是怎么实现的呢?作为一个程序员,知识和经验是在项目和平时的学习中积累的,下面是一个关于查询身份证信息的介绍和具体实现代码:
-------------------------------说明文档---------------------------------------------
接口地址:http://apis.juhe.cn/idcard/index
支持格式:json/xml
请求方式:get
请求示例:http://apis.juhe.cn/idcard/index?key=您申请的KEY&cardno=330326198903081211
请求参数说明:
返回参数说明:
JSON返回示例:
XML返回示例:
可能写到这里很多做过聚合数据的朋友都已经知道了,这是聚合数据Juhe.cn提供的API接口,如果你已
经了解可以跳过也可以继续看下去~每一个小的学习分享都是一份进步。
-------------------------------------------代码实现---------------------------------------------------------------------
当然这里,聚合API有提供具体Demo,你可以有时间去参考,也可以学习我的,我的代码更为细致并且讲解比较细致,可以参考学习:直接在百度输入“聚合数据”即可:
这里有很多免费的API接口提供我们的调用查询,下面我自己写了查询身份证信息查询、身份证挂失查询、身份证泄漏查询的三个接口。完整代码如下:记得把包名换掉哦~
上面代码拷贝之后引入相应的jar,我通过maven直接下载的,直接运行结果如下,考虑隐私问题部分已经遮挡不过可以参考说明文档Json返回数据。XML格式你可以自己更改测试:
这里我们可以看到查询返回成功,如果身份证号码或者格式等输入参数有误会有对应的错误码信息。具体可以自己参考聚合数据API文档。
我现在随便输入一个错误的身份证号码,看下查询结果:
既然出现了错误码,就顺手把错误码的参考字典贴出来吧~
通过上图的错误码我们知道是身份证有误。具体其他细节可以自己摸索~所有功能都已经实现了,具体代码方面我已经注释和编码已经很明确了,大家可以自己参考,不过具体主要部分我还是总结下:
1、APPKEY是需要个人到聚合数据申请的,否则查询不到。
2、三个查询接口,不同在于API提供的HTTP接口,有人会问为什么不用HTTPS,后续会改为HTTPS,现在用的MD5加密签名来保证信息一致性。
3、net方法发送HTTP请求。
4、如果你用心了你会发现这里的代码写法非常漂亮,有效的避免了重构一书所说的冗余代码、过长参数、方法命名让人疑惑等等的问题。比如你看下将map型转为请求参数型提炼为一个方法,后面可以供其他方法调用,小的功能分割出来有利于代码的管理并且功能清晰,代码整洁~哦拉拉,今天就到这里啦~
有什么问题或者错误欢迎指出~
工作描述基本结束了,下面是个人今天的技术分享:我们都知道网上有很多页面可以根据身份证查询归属地、性别、出生日期等;根据手机号码查询归属地。可是具体它是怎么实现的呢?作为一个程序员,知识和经验是在项目和平时的学习中积累的,下面是一个关于查询身份证信息的介绍和具体实现代码:
-------------------------------说明文档---------------------------------------------
接口地址:http://apis.juhe.cn/idcard/index
支持格式:json/xml
请求方式:get
请求示例:http://apis.juhe.cn/idcard/index?key=您申请的KEY&cardno=330326198903081211
请求参数说明:
名称 | 类型 | 必填 | 说明 | |
---|---|---|---|---|
cardno | string | Y | 身份证号码 | |
dtype | string | Y | 返回数据格式:json或xml,默认json | |
key | string | Y | 你申请的key |
名称 | 类型 | 说明 | |
---|---|---|---|
error_code | int | 返回码 | |
reason | string | 返回说明 | |
data | - | 返回结果集 | |
area | string | 地区 | |
sex | string | 性别 | |
birthday | string | 出生日期 |
{ "resultcode":"200", "reason":"成功的返回", "result":{ "area":"浙江省温州市平阳县", "sex":"男", "birthday":"1989年03月08日" } }
XML返回示例:
<root> <resultcode>200</resultcode> <reason>成功的返回</reason> <result> <area>浙江省温州市平阳县</area> <sex>男</sex> <birthday>1989年03月08日</birthday> </result> </root>
可能写到这里很多做过聚合数据的朋友都已经知道了,这是聚合数据Juhe.cn提供的API接口,如果你已
经了解可以跳过也可以继续看下去~每一个小的学习分享都是一份进步。
-------------------------------------------代码实现---------------------------------------------------------------------
当然这里,聚合API有提供具体Demo,你可以有时间去参考,也可以学习我的,我的代码更为细致并且讲解比较细致,可以参考学习:直接在百度输入“聚合数据”即可:
这里有很多免费的API接口提供我们的调用查询,下面我自己写了查询身份证信息查询、身份证挂失查询、身份证泄漏查询的三个接口。完整代码如下:记得把包名换掉哦~
package com.mo9.utils.juheApi; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import net.sf.json.JSONObject; /** *身份证查询调用示例代码 - 聚合数据 *在线接口文档:http://www.juhe.cn/docs/38 **/ public class JuheUtils { private static Logger logger = Logger.getLogger(JuheUtils.class); public static final String DEF_CHATSET = "UTF-8"; public static final int DEF_CONN_TIMEOUT = 30000; public static final int DEF_READ_TIMEOUT = 30000; public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36"; //配置您申请的KEY public static final String APPKEY ="***********************"; //身份证号码 public static final String IDCARD = "***************"; //返回数据类型 json/xml 默认json public static final String DTYPE = "json"; public static void main(String[] args) { String result = queryIdcardInfo(); <span style="white-space:pre"> </span>logger.info("===result==="+result); } //1.身份证信息查询 public static String queryIdcardInfo(){ String result =null; String url ="http://apis.juhe.cn/idcard/index";//请求接口地址 Map<String,Object> params = new HashMap<String,Object>();//请求参数 params.put("cardno",IDCARD);//身份证号码 params.put("dtype",DTYPE);//返回数据格式:json或xml,默认json params.put("key",APPKEY);//你申请的key try { result =net(url, params, "GET"); JSONObject object = JSONObject.fromObject(result); if(object.getInt("error_code")==0){ logger.info(object.get("result")); }else{ logger.info(object.get("error_code")+":"+object.get("reason")); } } catch (Exception e) { e.printStackTrace(); } return result; } //2.身份证泄漏信息查询 public static String getQueryIdcardLeakInfo(){ String result =null; String url ="http://apis.juhe.cn/idcard/leak";//请求接口地址 Map<String,Object> params = new HashMap<String,Object>();//请求参数 params.put("cardno",IDCARD);//身份证号码 params.put("dtype",DTYPE);//返回数据格式:json或xml,默认json params.put("key",APPKEY);//你申请的key try { result =net(url, params, "GET"); JSONObject object = JSONObject.fromObject(result); if(object.getInt("error_code")==0){ logger.info(object.get("result")); }else{ logger.info(object.get("error_code")+":"+object.get("reason")); } } catch (Exception e) { e.printStackTrace(); } return result; } //3.身份证挂失信息查询 public static String getQueryIdcardLossInfo(){ String result =null; String url ="http://apis.juhe.cn/idcard/loss";//请求接口地址 Map<String,Object> params = new HashMap<String,Object>();//请求参数 params.put("cardno",IDCARD);//身份证号码 params.put("dtype",DTYPE);//返回数据格式:json或xml,默认json params.put("key",APPKEY);//你申请的key try { result =net(url, params, "GET"); JSONObject object = JSONObject.fromObject(result); if(object.getInt("error_code")==0){ logger.info(object.get("result")); }else{ logger.info(object.get("error_code")+":"+object.get("reason")); } } catch (Exception e) { e.printStackTrace(); } return result; } /** * * @param strUrl 请求地址 * @param params 请求参数 * @param method 请求方法 * @return 网络请求字符串 * @throws Exception */ public static String net(String strUrl, Map<String,Object> params,String method) throws Exception { HttpURLConnection conn = null; BufferedReader reader = null; String rs = null; try { StringBuffer sb = new StringBuffer(); if(method==null || method.equals("GET")){ strUrl = strUrl+"?"+urlencode(params); } URL url = new URL(strUrl); conn = (HttpURLConnection) url.openConnection(); if(method==null || method.equals("GET")){ conn.setRequestMethod("GET"); }else{ conn.setRequestMethod("POST"); conn.setDoOutput(true); } conn.setRequestProperty("User-agent", userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); if (params!= null && method.equals("POST")) { try { DataOutputStream out = new DataOutputStream(conn.getOutputStream()); out.writeBytes(urlencode(params)); } catch (Exception e) { // TODO: handle exception } } InputStream is = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET)); String strRead = null; while ((strRead = reader.readLine()) != null) { sb.append(strRead); } rs = sb.toString(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { reader.close(); } if (conn != null) { conn.disconnect(); } } return rs; } //将map型转为请求参数型 public static String urlencode(Map<String,Object>data) { StringBuilder sb = new StringBuilder(); for (Map.Entry i : data.entrySet()) { try { sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return sb.toString(); } }
上面代码拷贝之后引入相应的jar,我通过maven直接下载的,直接运行结果如下,考虑隐私问题部分已经遮挡不过可以参考说明文档Json返回数据。XML格式你可以自己更改测试:
这里我们可以看到查询返回成功,如果身份证号码或者格式等输入参数有误会有对应的错误码信息。具体可以自己参考聚合数据API文档。
我现在随便输入一个错误的身份证号码,看下查询结果:
203803:身份证校验位不正确 ===result==={"resultcode":"203","reason":"身份证校验位不正确","result":{"area":"安徽省合肥市","sex":"男","birthday":"1996年03月10日","verify":"该身份证号校验位不正确"},"error_code":203803}
既然出现了错误码,就顺手把错误码的参考字典贴出来吧~
通过上图的错误码我们知道是身份证有误。具体其他细节可以自己摸索~所有功能都已经实现了,具体代码方面我已经注释和编码已经很明确了,大家可以自己参考,不过具体主要部分我还是总结下:
1、APPKEY是需要个人到聚合数据申请的,否则查询不到。
2、三个查询接口,不同在于API提供的HTTP接口,有人会问为什么不用HTTPS,后续会改为HTTPS,现在用的MD5加密签名来保证信息一致性。
3、net方法发送HTTP请求。
4、如果你用心了你会发现这里的代码写法非常漂亮,有效的避免了重构一书所说的冗余代码、过长参数、方法命名让人疑惑等等的问题。比如你看下将map型转为请求参数型提炼为一个方法,后面可以供其他方法调用,小的功能分割出来有利于代码的管理并且功能清晰,代码整洁~哦拉拉,今天就到这里啦~
有什么问题或者错误欢迎指出~
相关文章推荐
- 谁说程序员都是苦逼的——看看兄弟连上海S2班的点点滴滴
- 程序员在上海(4)
- 上海 招聘 asp.net jq 的程序员
- 程序员在上海之一
- 一个上海程序员的一天工作日志
- 程序员在上海(5)
- 程序员在上海(7)
- 上海麻辣马资深程序员叶劲峰:我的游戏人生
- 谁说程序员都是苦逼的——看看兄弟连上海S2班的点点滴滴
- 程序员在上海(6)
- 一个程序员眼中的北京和上海
- 程序员在上海之二
- 程序员在上海(11)
- 程序员在上海(3)
- 招聘asp.net程序员(上海)
- 上海java程序员招聘流程分析
- 一般情况的话 在西安或者上海北京的 c#程序员的薪金一月能拿多少
- 上海公积金销户问题--程序员
- 北京,上海Java程序员的月薪水平?
- 招聘.net高级程序员(上海)