其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持)。如果支持我们需要和他们拿到他们底层的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.statusif(status==="error"){alert("读取失败,重新读卡")}else if(status==="error"){alert("核查身份证到期日")}else{//获取信息var add=data.statusvar name=data.namevar idnum=data.idnumvar 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")@ResponseBodypublic 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;}

三:结语

代码不是很重要,重要的实现的思路。关键你要明白,如何读取我们一般调用硬件的底层,所以和研发沟通是很重要的。还有一定得读懂接口文档。

更多的经典案例和实现效果关注下面公众号查看:

web读取身份证信息(java语言)相关推荐

  1. 华视电子web读取身份证信息

    首先的是加入要引用的dll文件,放到需要使用的电脑的位置,我的是 E:/soft/labor/Termb.dll 然后看congtroller层的代码是: import com.exa.dem.ent ...

  2. 基于Android NFC传感器读取身份证信息demo

    摘要:通过导入开发包sdk开发基几Android NFC设备读取身份证信息 1. 开发条件: 1)鱼住往来科技的身份验证sdk :下载地址:https://www.yzfuture.cn/views/ ...

  3. 自动化神器啊,Python 批量读取身份证信息写入 Excel

    大家好,今天分享一个实用技能,利用 Python 批量读取身份证信息写入 Excel. 喜欢记得收藏.关注.点赞. 注:文末提供完整版代码.技术交流方式 读取 以图片形式的身份证为例,信息读取我们使用 ...

  4. 身份证读取设备开发解决方案:2、Android下通过usb转串口读取身份证信息

    身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 文章目录 身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 1. 前言 2. 准备 3. ...

  5. C#使用读卡器读取身份证信息(包含物理卡号)

    说明:本人用的是精伦身份证阅读器idr210 免驱 摘要:目前市面上读取身份证技术已经很成熟了,大多数文章都介绍了读取身份证的详细信息,但是这些信息里并不包含身份证的物理卡号,所以本文讲解的重点在读取 ...

  6. 基于华视身份证读卡器读取身份证信息的Android demo

    项目概述 本Demo需要华视的身份证读卡器,连接Android机器设备,当身份证读卡器读取到身份证信息后,立马展示出身份证信息数据.得到身份证的姓名.照片.出生年月等数据. 项目概述 本Demo需要华 ...

  7. 浏览器使用华视电子设备读取身份证信息

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家. 对人工智能感兴趣或者想了解的小伙伴,可以点击跳转到网站一起学习哟. https://www.captainai.ne ...

  8. VUE实现华视身份证阅读器读取身份证信息

    VUE实现华视身份证阅读器读取身份证信息 话不多上直接上代码,写的不怎么规范多多包涵,我是在模态框实现的,在这里就只提供模态框代码. 最后附上华视身份证阅读器安装文件和浏览器插件链接: [https: ...

  9. VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)

    本文是用了vue+element来实现华视身份证读卡器读取身份信息的,当然在开发之前要做好前提准备,就是厂家提供对应设备的api和安装对应的驱动.本文通过两种方法来实现读取信息,第一种是点击按钮读取信 ...

最新文章

  1. 解决 mac ox 终端显示bogon 的问题
  2. 警惕!银行风控模型或将“摇身一变”,成为风险缔造者
  3. char nchar varchar nvarchar varchar2区别
  4. python 输出“Hello, world”
  5. matlab交替隐式迭代,jQuery关于隐式迭代的个人理解~
  6. 5 video关掉字幕选项_Photoshop 2020中英文字幕批量生成的制作方法
  7. 接口带声音输出吗_智能化时代,你的功放跟得上科技的脚步吗?
  8. C4—Qt实现记事本(二)2021-11-16
  9. 一步一步教你 https 抓包
  10. 信噪比与雷达探测距离之间关系
  11. wp8.1 java_巨硬的内部比较——WP8.1版本与WP10系统对比(以lumia640为例)
  12. qcon_从QCon伦敦2010中学到的重点知识和教训
  13. 第三方统计分析埋点工具对比,神策、Ptmind、GrowingIO、国双,还有谷歌分析,谁更好?...
  14. 大内高手—常见内存错误
  15. 域名管理——DNS服务
  16. Fork\Join分而治之--RecursiveTask和RecursiveAction(一)
  17. SAP那些事-理论篇-14-SAP中的财务管理理念
  18. 无人机开发-图传技术浅析
  19. 奥比中光相机的python采集代码
  20. PHP版本微信支付开发----电脑网站扫码支付(native)(心得、总结)

热门文章

  1. GAN实战——书法字体生成练习赛开始报名啦!
  2. SSH连接git服务器学习笔记
  3. 北京大学可视化暑期学校Day1总结
  4. JAVA设计模式之访问者模式
  5. 基于Hi3516DV300rtmp交叉编译移植
  6. nacos项目启动失败[NA] failed to request
  7. mysqlit根据稀有值随机选择_三中锋教练来过了!实况足球20赛季DP7.0后新增稀有阵型top10...
  8. Julia ---- 为Julia做一下辩解
  9. 【数据分享】2022年11月西南地区POI数据分享(重庆、四川、贵州、云南、西藏)
  10. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 开启UART7串口功能