web读取身份证信息(java语言)
其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持)。如果支持我们需要和他们拿到他们底层的jar包和api(接口文档),要是有demo就更好了。
下面分享一下我实现的过程:
一:实现思路
1:和硬件的研发沟通好,拿到jar
因为需要动态库,会使用到dll,这个研发也会给我们,我们根据他们要求放在对应的位置就可以。dll怎么实现我们不需要理会,我们只要使用jar调用就可以。
2:把jar放到你的项目,build一下
3:新建对应的对象,调取函数,实现身份证读取
注意需要的参数,一般需要端口等,我这里需要的是端口,超时设置,头像路径。注意返回来的数据类型,最好是json数据格式,这样我们方便读取数据,我这里所有的信息合在一起返回来String类型。这里就需要我们做数据解析,我使用了数据分割,和截取数据长度,拿到自己想要的数据。
4:将信息返回前段,显示在from表单里面。
5:项目结束
二:具体代码
1:前段按钮触发
按钮
<div class="am-u-sm-3 am-u-sm-push-3">
<button type="button" onclick="checkNull()" class="am-btn am-btn-primary">提取信息</button>
</div>
js(ajax触发)
三种情况:
请求成功,显示在对应的from表单
请求失败,读取身份证有误
证件到期日小于一年,提醒使用者,注意到期日
//请求身份证信息
function checkNull(){
$.ajax({
url:"test/test",//后台的接口地址
type:"post",//post请求方式
success:function(data) {
var status=data.status
if(status==="error"){
alert("读取失败,重新读卡")
}else if(status==="error"){
alert("核查身份证到期日")
}else{
//获取信息
var add=data.status
var name=data.name
var idnum=data.idnum
var sex=data.sex
//将信息展示在from表单
$("#user-name").val(name);
$("#user-sex").val(sex);
$("#user-num").val(idnum);
$("#user-add").val(add);
}
},error:function (data) {
layer.close(index);
layer.msg('上传失败', {icon: 1});
}
})
}
2:后端对应的controller处理
新建对象,调用硬件的接口,设置需要传入的参数
//新建ctid对象
CT_IDCard ctid=new CT_IDCard();
//1001代表的sdt端口 20读取器超时设置 null头像的路径
String[] readCard_t2 = ctid.ReadCard_t2(1001,5, null);
根据返回状态,判断读取是否成功
0是成功,1是失败。0时,做数据解析,1返回前段,告诉使用者重新刷身份证。
//获取返回状态
String n=readCard_t2[0];
判断身份证当前日期和到期日期是否大于一年,提示使用者。写代码时考虑一下到期日为长期的结果。
所有实现代码
//读取身份证信息
@RequestMapping("test")
@ResponseBody
public JSONObject test(HttpServletRequest request) throws UnsupportedEncodingException, ParseException {
Map<String, String> map=new HashMap<String, String>();
//新建ctid对象
CT_IDCard ctid=new CT_IDCard();
//1001代表的sdt端口 20读取器超时设置 null头像的路径
String[] readCard_t2 = ctid.ReadCard_t2(1001,5, null);
//获取返回状态
String n=readCard_t2[0];
//n==0时,读取成功,其它读取失败
if(n.equals("0")) {
//使用spilt去把数据分割开
String a[] = readCard_t2[1].split(":|,");
//获取身份证到期日期
int length0 = a[9].length();
String stime = a[9].substring(2, length0-1);
System.out.println("身份证到期日期:"+stime);
/*
* 判断身份证是否为长期
* 长期不做数据校验
*/
if(stime.equals("长期")) {//身份证为长期
//获取想要的数据
int length = a[1].length();
String add = a[1].substring(2, length-1);
System.out.println("地址:"+add);
int length1 = a[13].length();
String name = a[13].substring(2, length1-1);
System.out.println("姓名:"+name);
int length2 = a[29].length();
String idnum = a[29].substring(2, length2-1);
System.out.println("身份证号:"+idnum);
int length3 = a[33].length();
String sex = a[33].substring(2, length3-1);
System.out.println("性别:"+sex);
map.put("status", add);
map.put("name", name);
map.put("idnum", idnum);
map.put("sex", sex);
}else {
//拆分年月日
String substring = stime.substring(0, 4);
String substring2 = stime.substring(4, 6);
String substring3 = stime.substring(6, 8);
System.out.println("年"+substring+"月"+substring2+"日"+substring3);
//转化为****-**-**格式
String sfztime=substring+"-"+substring2+"-"+substring3;
//新建time对象
TimeUtils time=new TimeUtils();
//转化身份证到期日为时间戳
String ztime=time.dateToStamp(sfztime);
long i = Long.parseLong(ztime);
//获取当前的时间戳
String nowtime=time.getstampTime();
long i1 = Long.parseLong(nowtime);
System.out.println("ztime"+ztime+"nowtime"+nowtime);
//身份证到期如与当前时间做差
long i2=i-i1;
//身份证到期日与当前时间差大于一年
if(i2>=31536000) {
//获取想要的数据
int length = a[1].length();
String add = a[1].substring(2, length-1);
System.out.println("地址:"+add);
int length1 = a[13].length();
String name = a[13].substring(2, length1-1);
System.out.println("姓名:"+name);
int length2 = a[29].length();
String idnum = a[29].substring(2, length2-1);
System.out.println("身份证号:"+idnum);
int length3 = a[33].length();
String sex = a[33].substring(2, length3-1);
System.out.println("性别:"+sex);
map.put("status", add);
map.put("name", name);
map.put("idnum", idnum);
map.put("sex", sex);
}else {//身份证到期日与当前时间差不大于一年 提醒信贷员考虑合同是否往下做
map.put("status", "error1");
}
}
}else {//数据获取失败
map.put("status", "error");
}
// String flag= new String(readCard_t2[1].getBytes("gbk"),"utf-8");
// System.out.println(flag);
//String flag= new String(readCard_t2[1].getBytes("ISO-8859-1"),"gbk");
//String flag1= new String(flag.getBytes("gbk"),"utf-8");
JSONObject json=JSONObject.fromObject(map);
return json;
}
三:结语
代码不是很重要,重要的实现的思路。关键你要明白,如何读取我们一般调用硬件的底层,所以和研发沟通是很重要的。还有一定得读懂接口文档。
更多的经典案例和实现效果关注下面公众号查看:
本文地址:https://blog.csdn.net/baidu_38978508/article/details/107299833
下一篇: js中Let和Var的相同点和区别
推荐阅读
-
基于Android NFC传感器读取身份证信息demo
-
java判断身份证信息小程序(有图形界面)
-
Java 读取 Nginx 日志记录并解析 [04/Nov/2020:18:54:11 +0800] 字段为正常时间信息
-
ABAP,Java, nodejs和go语言的web server编程 ABAPJavanodejsgoweb
-
Java语言读取配置文件config.properties的方法讲解
-
Java web 项目中的注册功能代码(用户注册信息写入数据库)
-
Web项目中java类读取WebRoot目录下的配置文件
-
java web项目读取配置文件properties的3种方式
-
web读取身份证信息(java语言)
-
S200XD高拍仪读取身份证信息