Springboot 对接中控智慧台式身份证阅读机具ID180

在这里插入图片描述
公司因业务需要采购了几台身份证读卡器,方便用户刷卡入园,机器一到立马去官网找sdk、找demo,找了一圈都没有看见,后面只好找销售联系技术支持拿到了一份工具包。在这里插入图片描述
使用他们提供的多浏览器版本的话后端基本不需要做什么操作,直接安装一个驱动,前端直接打开他们提供的html文件就可以读取到信息,并显示到页面上,驱动如图
在这里插入图片描述
这个是他们提供读取页面的案例
在这里插入图片描述
一点读取信息就ok,现在只需要前端通过websocket将数据传递给后台就OK了,但是存在一个问题,人流一多,一直让用户点也不是个事,后面让前端改成循环读取的按钮,表面上看着万事大吉了,其实暗藏了一个隐患,当开启循环读取的时候,没过多久就读取不出来了,出现假死状态,显示繁忙,最后咨询他们技术有没有好的解决办法,说去掉自动循环读取,改为手动点一次读取一次
<( ̄ ﹌  ̄)>
最后没辙了,只好通过他们提供的动态库,利用java来加载动态库读取身份信息,然后再将读取到身份信息通过websocket推送给前端展示。
首先先安装他们提供的usb驱动(这个是定制的驱动,不安装识别不到连接电脑的ID180机器)在这里插入图片描述
然后新建一个普通的springboot 项目,项目结构如下
在这里插入图片描述
DLL文件夹用来放置动态库(建议,测试的时候可以放在该目录下,等打包运行的时候最好放到一个指定的根目录下,方便加载,不然会报加载不到)
在这里插入图片描述

zkteco.id100com.jni 

这个包名一定不能变,因为生成jni的时候是这个包名,如果发生变化,一定会loadclass失败(切记,不要问为什么,因为在这上面栽了跟头)
id100sdk的核心代码如下

package zkteco.id100com.jni;

public class id100sdk {
	/**
	 * <code>id100sdk</code> 身份证阅读器接口类
	 */
	static  
	{  
		System.load("G:\\bowu\\ZhongKong\\DLL\\x64\\termb.dll");
	}
	
	/**
	 * 获取文件目录
	 * @return 文件目录
	 */
	public native static String getPath();
	
	/**
	 * 连接身份证阅读器
	 * 
	 * @param nPort 设备端口(串口:1~16;USB:1001~1016)
	 * @return 
	 * 成功返回设备端口
	 * 失败返回0
	 */
	public native static int InitComm(int nPort);
	
	/**
	 * 自动搜索并连接身份证阅读器
	 * 
	 * @return 
	 * 成功返回设备端口(串口:1~16;USB:1001~1016)
 	 * 失败返回0
	 */
	public native static int InitCommExt();
	
	
	/**
	 * 	断开与身份证阅读器连接
	 * @return 
	 * 成功返回1
	 * 失败返回0
	 */
	public native static int CloseComm();
	
	/**
	 * 认证卡(寻卡&选卡)
	 * @return	
	 * 成功返回1
	 * 失败返回0
	 */
	public native static int Authenticate();
	
	/**
	 * 读卡操作,信息文件保存在dll所在目录
	 * @param nActive	1读基本信息(文字&照片&指纹);2读文字照片;3读最新地址
	 * @return	1 居民身份证读取成功;2 外国人永居证读取成功;3 港澳台居住证读取成功;-11无效参数;0其他错误
	 */
	public native static int ReadContent(int nActive);
	
	/**
	 * 获取SAM模块编号
	 * @return	成功返回SAM模块编号;失败返回空字符串
	 */
	public native static String GetSAMID();
	
	/**
	 * 设置临时文件生成的目录;空目录,则不保存临时文件
	 */
	public native static void SetTemDir(String FileName);
	
	/**
	 * 获取SAM模块编号(10位编号)
	 * @return	成功返回SAM模块编号;失败返回空字符串
	 */
	public native static String GetSAMIDEx();
	
	/**
	 * 解析(xp.wlt)身份证照片
	 * @param FileName xp.wlt全路径名
	 * @return	成功返回1;失败返回0
	 */
	public native static int GetBmpPhoto(String FileName);
	
	
	/**
	 * 解析(dll目录下的xp.wlt)身份证照片
	 * @return	成功返回1;失败返回0
	 */
	public native static int GetBmpPhotoExt();
	
	/**
	 * 重置sam模块
	 * @return	成功返回1;失败返回0
	 */
	public native static int ResetSAM();
	
	
	/**
	 * 获取SAM模块状态
	 * @return	状态正常返回1;异常返回0
	 */
	public native static int GetSAMStatus();
	
	/**
	 * 获取姓名 
	 * @return 返回姓名
	 */
	public native static String getName();
	
	
	/**
	 * 获取性别
	 * @return 返回性别
	 */
	public native static String getSex();
	
	/**
	 * 获取性别编号
	 * @return	返回性别编号
	 */
	public native static int getSexCode(); 
	
	/**
	 * 获取民族
	 * @return	返回民族
	 */
	public native static String getNation();
	
	
	/**
	 * 获取民族编号
	 * @return	返回毛南族编号
	 */
	public native static int getNationCode();
	
	/**
	 * 获取生日(YYYYMMDD)
	 * @return	返回生日
	 */
	public native static String getBirthdate();
	
	/**
	 * 获取地址
	 * @return  返回地址
	 */
	public native static String getAddress();
	
	
	/**
	 * 获取身份证号码
	 * @return	返回身份证号码
	 */
	public native static String getIDNum();
	
	
	/**
	 * 获取签发机关
	 * @return	返回签发机关
	 */
	public native static String getIssue();
	
	/**
	 * 获取有效期起始日期(YYYYMMDD)
	 * @return	返回有效期起始日期
	 */
	public native static String getEffectedDate();
	
	
	/**
	 * 获取有效期截止日期
	 * @return	返回有效期截止日期
	 */
	public native static String getExpireDate();
	
	/*
	 * 获取bmp图片base64编码
	 * @return 返回bmp图片base64编码
	 */
	public native static String getBMPPhotoBase64();
	
	
	/**
	 * 获取JPG头像Base64编码
	 * @return 返回JPG头像Base64编码
	 */
	public native static String getJPGPhotoBase64();
	
	
	
	/**
	 * 语音提示
	 * @param nVoice 语音类型
	 * 0:
	 * @return	成功返回1;失败返回0
	 */
	public native static int HIDVoice(int nVoice);
	
	/**
	 * 设置发卡器序列号
	 * @param iPort	串口号
	 * @param data	发卡器序列号
	 * @return	成功返回1;失败返回0
	 */
	public native static int ICSetDevNum(int iPort, String data);
	
	/**
	 * 获取发卡器序列号
	 * @param iPort	串口号
	 * @return	成功返回发卡器序列号;失败返回空字符串
	 */
	public native static String ICGetDevNum(int iPort);
	
	/**
	 * 获取发卡器版本
	 * @param iPort	串口号
	 * @return 成功返回发卡器版本(HexString),失败返回空字符串
	 */
	public native static String ICGetDevVersion(int iPort);
	
	/**
	 * 发卡
	 * @param iPort	串口号
	 * @param keyMode	keyA/KeyB
	 * @param Sector	扇区号
	 * @param idx	//块索引
	 * @param key	//密钥
	 * @param data	//数据
	 * @param snr	//返回卡号
	 * @return	成功返回1;失败返回0
	 */
	public native static int ICWriteData(int iPort, int keyMode, int Sector, int idx, String key, String data, int[] snr);
	
	/**
	 * 读卡
	 * @param iPort	串口号
	 * @param keyMode	keyA/KeyB
	 * @param Sector	扇区号
	 * @param idx	//块索引
	 * @param key	//密钥
	 * @param snr	//返回卡号
	 * @return 成功返回卡数据(HexString);失败返回空串
	 */
	public native static String ICReadData(int iPort, int keyMode, int Sector, int idx, String key, int[] snr);


	/**
	 * 读取IC卡物理卡号
	 * @param iPort	串口号
	 * @param snr	返回IC卡物理卡号
	 * @return	成功返回1;失败返回0
	 */
	public native static int ICGetICSnr(int iPort, int[] snr);
	
	
	/**
	 * 获取ID卡物理卡号
	 * @param iPort	串口号
	 * @return	成功返回ID卡物理卡号(HexString);失败返回空串
	 */
	public native static String ICGetIDSnr(int iPort);
	
	/**
	 * 	修改扇区密码
	 * @param iPort 串口号
	 * @param keyMode	keyA/KeyB
	 * @param Sector	扇区号(0~15)
	 * @param oldKey	keyA/KeyB原始密码
	 * @param newKey	新密码
	 * @return	成功返回1;失败返回0
	 */
	public native static int ICChangeSectorPassword(int iPort, int keyMode, int Sector, String oldKey, String newKey);
	
	/**
	 * 设置身份证头像透明阀值(RGB),3值均大于设置值透明
	 * @param R	Red
	 * @param g green
	 * @param b blue
	 */
	public native static void SetTransparentThreshold(byte R, byte g, byte b);
	
	/**
	 * 获取身份证指纹模板
	 * @return 返回横版身份证指纹模板Base64编码
	 */
	public native static String getFPDataBase64();
	
	/**
	 * 获取证件类型
	 * @return	返回证件类型(1 二代证; 2 外国人永居证,3 港澳台居住证)
	 */
	public native static int getCardType(); 
	
		/**
	 * 获取银行卡卡号
	 * @param iPort	串口号
	 * @return	成功返回ID卡银行卡卡号;失败返回空串
	 */
	public native static String ICGetBankCardNum(int iPort);
	
	/**
	 * 获取港澳台居住证签证次数
	 * @return	签证次数
	 */
	public native static int getVisaTimes();
	
	/**
	 * 获取港澳台居住证通行证号
	 * @return 返回港澳台居住证通行证号
	 */
	public native static String getPassNum();
	
	/**
	 * 获取外国人英文名 
	 * @return 返回外国人英文名 
	 */
	public native static String getEnName();
	
	/**
	 * 获取外国人中文名
	 * @return 返回外国人中文名
	 */
	public native static String getCnName();
}

至此就可以使用了,留下一点足迹,源码请移步传送门

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: SpringBoot是一个开源的Java框架,它可以帮助开发者快速搭建和部署基于Java的应用程序。而对接大华相机视频SDK的预览和抓图功能主要可以通过以下步骤实现: 1. 导入大华相机视频SDK的依赖:可以通过Maven或Gradle等构建工具将大华相机视频SDK的依赖添加到项目中,并进行相关的配置。 2. 使用SpringBoot的自动配置功能:SpringBoot提供了自动配置的功能,可以根据项目的依赖自动进行一些配置。在配置文件中添加相关的配置参数,如相机的IP地址、端口号等信息。 3. 编写预览功能:通过调用大华相机视频SDK的相关API,可以实现对相机视频流的获取和预览。可以使用JavaCV等开源库来处理视频流,并将预览结果显示在前端页面上。 4. 编写抓图功能:同样通过调用大华相机视频SDK的相关API,可以实现对相机视频流的抓图功能。可以将抓图结果保存到本地或上传到服务器,并返回给前端页面展示。 总之,通过SpringBoot的自动配置功能和大华相机视频SDK的API调用,可以实现对大华相机的预览和抓图功能。开发者可以根据自己的需求进行具体的功能实现和优化。 ### 回答2: Spring Boot是一个开源的Java开发框架,用于简化Java应用程序的开发和部署过程。对接大华相机视频SDK的预览和抓图功能可以使用Spring Boot提供的多种技术和工具来实现。 首先,我们需要引入大华相机视频SDK的依赖,可以通过Maven或Gradle等构建工具来管理依赖。在pom.xml或build.gradle文件中添加相应的依赖,并进行构建。 在Spring Boot的应用程序中,可以使用Spring MVC来处理HTTP请求。我们可以创建一个Controller来处理预览和抓图的请求。在Controller中定义相应的接口,并使用大华相机视频SDK提供的API来实现具体的功能。 对于预览功能,我们可以通过SDK提供的方法来连接相机设备并获取实时视频流。可以在Controller中定义一个路由,当用户访问该路由时,调用SDK的方法来获取视频流并返回给用户。可以使用Spring MVC提供的@ResponseBody注解将视频流以二进制流的形式返回给前端。 对于抓图功能,我们可以通过SDK提供的方法来抓取当前视频帧并保存为图片。在Controller中定义一个路由,当用户访问该路由时,调用SDK的方法来抓取当前视频帧并保存为图片。可以使用Spring MVC提供的@ResponseEntity注解将图片以响应的形式返回给前端。 除了Spring MVC,Spring Boot还提供了丰富的工具和功能,如Spring Security用于权限管理,Spring Data JPA用于数据库操作等。可以根据具体需求来选择使用哪些功能来完善整个应用程序。 总而言之,通过使用Spring Boot框架和大华相机视频SDK的API,我们可以很方便地实现预览和抓图的功能。 ### 回答3: SpringBoot是一个用于构建独立的、产品级别的Spring应用程序的开源框架。对接大华相机视频SDK的预览和抓图功能,可以通过以下步骤完成: 1. 添加依赖:在SpringBoot项目的pom.xml文件中添加大华相机视频SDK的依赖。 2. 配置SDK连接参数:在application.properties文件中配置相机的IP地址、端口号、用户名和密码等连接参数。 3. 初始化SDK:在SpringBoot的启动类中,使用SDK提供的初始化方法进行SDK的初始化,保证后续的调用可以正常进行。 4. 预览视频:可以在控制器类中创建一个接口,代码中使用SDK提供的方法进行视频预览。可以选择将视频流连续实时地输出到前端页面,或者通过SDK提供的回调功能将每一帧数据进行处理后输出。 5. 抓取图像:在控制器类中再创建一个接口,代码中使用SDK提供的方法进行图像的抓取。可以选择将抓取到的图像保存到本地磁盘,或者直接返回到前端页面进行展示。 需要注意的是,对接大华相机视频SDK需要开发者具备一定的视频处理和图像处理基础。同时,也需要根据SDK的文档和接口规范进行具体的编码实现。这里只是简单介绍了一种可能的实现方式,并不能覆盖所有具体细节。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值