Java用身份证阅读器读取身份证的基本信息,阅读器型号为华旭(HX-FDX3S HX-FDX5)。

产品自带了几个Demo,唯独没有Java的。用Java写了个Demo.基本思路,用JNA调取原生sdtapi.dll进行操作。

封装DLL的操作类

package com.ic;import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;/**** 身份证识别器类库(采用JNA开发)* @author zdw**/
public interface ICDll extends Library
{ICDll instance = (ICDll)Native.loadLibrary("D:\\workspace\\myecipse\\nmq-makingcard\\sdtapi.dll", ICDll.class);/**** 打开端口* @param port 1001~1016(十进制)为 USB 口。 例如:1001: USB1,1002,USB2* @return*/public int SDT_OpenPort(int port);/**** 寻找居民身份证* @param port 端口* @param byManaID 存储导卡数据* @param iIfOpen 自动打开设备标志。如果设置为1,则在接口内部自动实现打开设备和关闭设备,无需调用者再添加* @return 0x9f 找卡成功。0x80 找卡失败。*/public int SDT_StartFindIDCard(int port,byte[] byManaID,int iIfOpen);/***** 选卡* @param port 端口* @param byManaID 存储选卡数据* @param iIfOpen 自动打开设备标志。如果设置为1,则在接口内部自动实现打开设备和关闭设备,无需调用者再添加* @return*/public int SDT_SelectIDCard(int port,byte[] byManaID,int iIfOpen);/**** 读取身份证基本信息(文字信息采用GB 13000的UCS-2进行存储对应java的 StandardCharsets.UTF_16LE编码)* @param iPort 端口* @param pucCHMsg 存储基本文字信息* @param puiCHMsgLen 读取文字长度  0为全部 最大256.* @param pucPHMsg 存储照片信息* @param puiPHMsgLen 读取照片长度  0为全部 最大256.* @param iIfOpen 自动打开设备标志。如果设置为1,则在接口内部自动实现打开设备和关闭设备,无需调用者再添加* @return*/public int SDT_ReadBaseMsg(int iPort, byte[] pucCHMsg, IntByReference puiCHMsgLen, byte[] pucPHMsg, IntByReference puiPHMsgLen, int iIfOpen);
}

封装的工具类(注意编码)

package com.ic;import java.nio.charset.StandardCharsets;
import java.util.Arrays;import com.sun.jna.ptr.IntByReference;/*** 读身份证信息* (流程:寻卡--选卡--读卡)* @author zdw**/
public class ICSDK
{//存储基本文字信息private byte[] byCHMsg = new byte[256 + 1];//存储照片信息 private byte[] byPHMsg = new byte[1024 + 1];public ICSDK(){byte[] byManaID = new byte[8];//寻卡Integer result = ICDll.instance.SDT_StartFindIDCard(1001, byManaID, 1);System.out.println(Integer.toHexString(result));byManaID = new byte[8];//选卡result = ICDll.instance.SDT_SelectIDCard(1001, byManaID, 1);System.out.println(Integer.toHexString(result));//读卡result = ICDll.instance.SDT_ReadBaseMsg(1001, byCHMsg, new IntByReference(0), byPHMsg, new IntByReference(0), 1);System.out.println(Integer.toHexString(result));}public static ICSDK getInstance(){return new ICSDK();}/*** 获取姓名* @return*/public String getName(){return new String(Arrays.copyOf(byCHMsg, 30), StandardCharsets.UTF_16LE);}/**** 获取性别* @return*/public String getGener(){return new String(Arrays.copyOfRange(byCHMsg, 30, 32), StandardCharsets.UTF_16LE); }/**** 获取民族* @return*/public String getNation(){return new String( Arrays.copyOfRange(byCHMsg, 32, 36), StandardCharsets.UTF_16LE); }/**** 获取民族* @return*/public String getBirth(){return new String(Arrays.copyOfRange(byCHMsg, 36, 52), StandardCharsets.UTF_16LE); }/**** 获取住址* @return*/public String getAddress(){return new String(Arrays.copyOfRange(byCHMsg, 52, 122), StandardCharsets.UTF_16LE); }/**** 获取身份证号码* @return*/public String getIc(){return new String(Arrays.copyOfRange(byCHMsg, 122, 158), StandardCharsets.UTF_16LE); }/**** 发证单位* @return*/public String getStation(){return new String(Arrays.copyOfRange(byCHMsg, 158, 188), StandardCharsets.UTF_16LE); }/**** 有效开始日期* @return*/public String getBegindate(){return new String(Arrays.copyOfRange(byCHMsg, 188, 204), StandardCharsets.UTF_16LE); }/**** 有效结束日期* @return*/public String getEnddate(){return new String(Arrays.copyOfRange(byCHMsg, 204, 220), StandardCharsets.UTF_16LE); }/**** 最新地址* @return*/public String getLateAddress(){return new String(Arrays.copyOfRange(byCHMsg, 220, 290), StandardCharsets.UTF_16LE); }public String getBaseAll(){return new String(byCHMsg, StandardCharsets.UTF_16LE); }
}

测试类:

public class Dlltest {public static void main(String[] args)  {ICSDK icsdk = ICSDK.getInstance();System.out.println(icsdk.getName());System.out.println(icsdk.getBaseAll());}}

完整Demo下载

Java身份证阅读器(HX-FDX3S HX-FDX5)相关推荐

  1. 华视100UC 身份证阅读器 Java

    华视100UC 身份证阅读器 Java 哪位大佬有64位可用的dll文件,施舍给小弟吧,万分感谢 功能 环境 个人想法(有不对的地方希望大佬指正) 对于dll文件的想法 目录结构 1. pom.xml ...

  2. 二代身份证阅读器 C#、JAVA调用教程

    型号:普天CPIDMR02/TG身份证阅读器 SDK版本:2020 (我这不提供下载,自己咨询卖家,或者网上自己找,SDK 厂家不二次封装的机器理论通用) 新老版本区别: 多了外国人永久居留身份证.港 ...

  3. JNA二次开发华视身份证阅读器

    JNA二次开发华视身份证阅读器 前言 添加依赖 SDK资料 编写代码 遇到的问题(坑) 前言 这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative,其中JNA调用 ...

  4. Kotlin之身份证阅读器(华视)二次开发

    一.简介 身份证阅读器使用场景比较多,围绕它按照自己的需求进行二次开发的也不少,我这次也是围绕身份证阅读器进行二次开发,不过使用的是kotlin作为开发的语言,资料比较少,参考了java的开发设计JA ...

  5. VUE整合信通身份证阅读器返回读取到的数据或将身份证图片返回

    需求:身份证阅读器在浏览器上接入读取身份证信息 JAVA后端身份证图片合成https://blog.csdn.net/Ajie246862/article/details/125259692 1. 身 ...

  6. 东控智能IDR-100U身份证阅读器怎么样?

    有人听说过这款身份证阅读器吗?外观可以定制,下面有它的介绍和一些参数 IDR-100U台式居民身份证读卡器 产品简介: IDR-100U台式居民身份证阅读机具是广东东控智能科技有限公司为各有关单位方便 ...

  7. 公安部身份证阅读器模块SAM通讯协议

    公安部身份证阅读器模块SAM通讯协议 图为:公安部身份证阅读器SAM模块照片 图为:东信新一代小身份证SAM模块 支持Windows.Android.Linux.ARM.单片机等各系统二次开发. 一. ...

  8. 二代身份证读取 中控ID180 二三代身份证阅读器 Vue版本

    二代身份证读取 中控ID180 二三代身份证阅读器 Vue版本 设备 设备名称:台式身份证阅读机 产品型号:ID180 设备驱动和文档 链接:https://pan.baidu.com/s/1nAYk ...

  9. 居民身份证阅读器产品开发学习心得(再谈标准-软件-协议)

    说到一些产品化的东西,之前就写过一篇关于标准化的文章,当然作为我本人而言,也是在不断的学习中,理解标准,则有利于未来转型走向产品以及市场相关的岗位,因为我不单单是要了解怎么做?(这是技术层面),我还需 ...

最新文章

  1. centos 对某ip开放 防火墙端口_CentOS防火墙iptables限制端口和来源IP地址访问的配置...
  2. 解决vue: 无法将“vue”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称...
  3. 列Readonly的问题
  4. HTML页面代码移动端和pc兼容,pc端网站如何实现移动端适配?
  5. 秒,在解答这个C语言题目上,我们都败了
  6. spring cloud sleuth在spring中创建span
  7. 块级、行内元素水平垂直居中方法
  8. 实现第一个JDBC程序(详细)
  9. 粒度计算机英语,An Overview of Granular Computing粒度计算研究综述
  10. 2021爱分析·药企数字化趋势报告
  11. 集合的相关概念(开闭、有界无界、内点边界点等)
  12. IDEA快速启动ssm项目
  13. 使用微信即时扫码开门
  14. [转载 蓝韦巍]类似浩方、VS对战平台系统的实现
  15. windows如何导出组策略结果集 (RSOP)
  16. 《胡雪岩·红顶商人》—— 读后总结
  17. 惊!成年蚂蚁竟然返老还童!原因居然是。。。。
  18. 2021年程序人生的随想总结
  19. 第四章 JavaWeb CSS入门 核心基础 基础形式 + 选择器
  20. error: unable to unlink old 'antzb-web/src/main/webapp/js/ny-details.js': Invalid argument

热门文章

  1. 文本的换行与包裹 之可能是全网最详细的 line-break 中文介绍
  2. 【Android 】零基础到飞升 | 开关按钮ToggleButton和开关Switch
  3. 【转发】半年收入超2亿RMB 独立游戏开发者的艰苦创业路
  4. CTF常用工具_实时更新
  5. 那些我踩过的关于腾讯文档和word2016的坑!
  6. xp系统注册表开启打印机的服务器,打印机注册表位置
  7. IPMsg飞鸽传书网络协议解析手记
  8. 81章 老子1章到_老子道德经第1---81章原文及译文
  9. Microsoft Graph notifications API 退役
  10. 对症下药:删除顽固文件夹方法汇总