欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

web读取身份证信息(java语言)

程序员文章站 2022-06-28 19:01:07
其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持)。如果支持我们需要和他们拿到他们底层的jar包和api(接口文档),要是有demo就更好了。下面分享一下我实现的过程:一:实现思路1:和硬件的研发沟通好,拿到jar因为需要动态库,会使用到dll,这个研发也会给我们,我们根据他们要求放在对应的位置就可以。dll怎么实现我们不需要理会,我们只要使用jar调用就可以。2:把jar放到你的项目,build一下3:新建对应的对象,调取函数,实现...

其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持)。如果支持我们需要和他们拿到他们底层的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;
	}

三:结语

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

更多的经典案例和实现效果关注下面公众号查看:
web读取身份证信息(java语言)

本文地址:https://blog.csdn.net/baidu_38978508/article/details/107299833