【Java读取ID卡卡号源码】男儿欲遂平生志,五经勤向窗前读。这篇文章主要讲述Java读取ID卡卡号源码相关的知识,希望能为你提供帮助。
import com.sun.jna.Library ;
import com.sun.jna.Native;
interface CLibrary extends Library
//DLL绝对路径的地址获取,注意要去空格,特别坑
//不同版本的读写器,接口DLL文件名称、函数名称是一样的,但内核代码不一样,请选用与读写器、操作系统一致的OUR_IDR.dll
String filePath = CLibrary.class.getResource("").getPath().replaceFirst("/","").replaceAll("%20"," ")+"OUR_IDR";
CLibrary sdtapi = (CLibrary) Native.loadLibrary(filePath, CLibrary.class);
//动态链接库中的方法
byte idr_beep(int xms);
//让设备发出声音
byte pcdgetdevicenumber(byte[] devicenumber);
//读取设备编号
String pcdgetdevicenumber_str();
//读取设备编号,输出字符串
byte idr_read(byte[] mypiccserial );
//轻松读卡,只要卡在感应区,每次执行此方法都可以读到卡号
byte idr_read_once(byte[] mypiccserial );
//卡在感应区时只能读一次,需将卡从感应区盒开再放入感应区才能再次读到卡
String idr_read_8h10d_str();
//读卡,输出十位十进制卡号
String idr_read_once_8h10d_str();
//读卡,输出十位十进制卡号,卡在感应区时只读一次
public class IDReader
public static void main(String[] args)
System.setProperty("jna.encoding", "GBK");
String filePath = CLibrary.class.getResource("").getPath().replaceFirst("/", "").replaceAll("%20", " ") + "OUR_IDR.DLL";
System.out.println("本示例引用的DLL文件:" + filePath);
if (args.length == 0)
System.out.println("\\n请先输入运行参数!");
System.out.println("\\n参数 0:驱动读卡器嘀一声");
System.out.println("\\n参数 1:读取设备编号");
System.out.println("\\n参数 2:读取设备编号,输出字符串");
System.out.println("\\n参数 3:轻松读卡");
System.out.println("\\n参数 4:轻松读卡,卡在感应区时只能读一次,需将卡从感应区盒开再放入感应区才能再次读到卡");
System.out.println("\\n参数 5:轻松读卡,输出十位十进制卡号");
System.out.println("\\n参数 6:轻松读卡,输出十位十进制卡号,卡在感应区时只能读一次");
return;
//java中只能使用string1.equals(string2)的方式来比较字符串
if (args[0].equals("0"))//驱动读卡器发嘀一声
System.out.print("\\n0-驱动读卡器嘀一声\\n");
CLibrary.sdtapi.idr_beep(50);
System.out.print("结果:如果能听到读卡器嘀一声表示成功,否则请检查读卡器是否已连上线!\\n\\n");
else if (args[0].equals("1"))//读取设备编号,可做为软件加密狗用,也可以根据此编号在公司网站上查询保修期限
int status;
//存放返回值
byte[] devicenumber = new byte[4];
//4字节设备编号
System.out.print("\\n1-读取设备编号\\n");
status = (int) (CLibrary.sdtapi.pcdgetdevicenumber(devicenumber) &
0xff);
//&
0xff用于转为无符号行数据
System.out.print("结果:");
if (status == 0)
CLibrary.sdtapi.idr_beep(38);
System.out.print("读取成功!设备编号为:" + (devicenumber[0] &
0xff) + "-" + (devicenumber[1] &
0xff) + "-" + (devicenumber[2] &
0xff) + "-" + (devicenumber[3] &
0xff));
else
PrintErrInf(status);
//错误代码提示
else if (args[0].equals("2"))//读取设备编号,直接输出字符串
System.out.print("\\n2-读取设备编号\\n");
String devicenumber = CLibrary.sdtapi.pcdgetdevicenumber_str();
//设备编号
CLibrary.sdtapi.idr_beep(38);
System.out.print("读取成功!设备编号为:" + devicenumber+"\\n");
else if (args[0].equals("3"))//轻松读卡
int status;
//存放返回值
byte[] mypiccserial= new byte[5];
//5字节卡序列号
System.out.print("\\n3-轻松读卡\\n");
status = (int) (CLibrary.sdtapi.idr_read(mypiccserial ) &
0xff);
//只要卡在感应区,每次执行此方法都可以读到卡号
System.out.print("结果:");
if (status == 0)
CLibrary.sdtapi.idr_beep(38);
String serialnumber = "";
for (int i = 0;
i <
5;
i++)
String bytestr = "00" + Integer.toHexString(mypiccserial[i] &
0xff);
推荐阅读
- 无屏幕BCI系统也有强大的分类性能
- centos7 以上 安装 docker 和 docker-compose
- elasticsearch7.16版本数据冷热分层迁移失败总结
- U盘把 FAT32 转成 NTFS 的方式,实现过大的文件可以传输
- mysql 内网环境 连接慢排坑
- centos8 ens33 没有 ip 的解决方法(没有 ip 会导致无法 ping 通别的服务)
- 7次KDD Cup&Kaggle冠军的经验分享(从多领域优化到AutoML框架)
- IT商业大战3
- 逆向进阶,利用 AST 技术还原 JavaScript 混淆代码