Java读取ID卡卡号源码
读卡器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.17.4aad5b43flg23y&id=562957272162https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.17.4aad5b43flg23y&id=562957272162
import com.sun.jna.Library ;
import com.sun.jna.Native;interface CLibrary extends Library {//DLL绝对路径的地址获取,注意要去空格,特别坑//不同版本的读写器,接口DLL文件名称、函数名称是一样的,但内核代码不一样,请选用与读写器、操作系统一致的OUR_IDR.dllString 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);serialnumber = serialnumber + bytestr.substring(bytestr.length() - 2, bytestr.length());}System.out.print("读取成功!16进制卡序列号为:" + serialnumber+"\n");long cardnum;cardnum=mypiccserial[4] & 0xff;cardnum=cardnum+(mypiccserial[3] & 0xff) *256;cardnum=cardnum+(mypiccserial[2] & 0xff) *65536;cardnum=cardnum+(mypiccserial[1] & 0xff) *16777216;long cardno10 = 0;for (int j=28; j>=0; j-=4) {cardno10 = cardno10<<4 | (cardnum>>>j & 0xF);}System.out.print("换算成10进制卡号:"+String.format("%010d", cardno10)+"\n");} else {PrintErrInf(status); //错误代码提示}}else if (args[0].equals("4")) //轻松读卡,卡在感应区时只能读一次,需将卡从感应区盒开再放入感应区才能再次读到卡{int status; //存放返回值byte[] mypiccserial = new byte[5]; //5字节卡序列号System.out.print("\n4-轻松读一次卡\n");status = (int) (CLibrary.sdtapi.idr_read_once(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);serialnumber = serialnumber + bytestr.substring(bytestr.length() - 2, bytestr.length());}System.out.print("读取成功!16进制卡序列号为:" + serialnumber+"\n");long cardnum;cardnum=mypiccserial[4] & 0xff;cardnum=cardnum+(mypiccserial[3] & 0xff) *256;cardnum=cardnum+(mypiccserial[2] & 0xff) *65536;cardnum=cardnum+(mypiccserial[1] & 0xff) *16777216;long cardno10 = 0;for (int j=28; j>=0; j-=4) {cardno10 = cardno10<<4 | (cardnum>>>j & 0xF);}System.out.print("换算成10进制卡号:"+String.format("%010d", cardno10)+"\n");} else {PrintErrInf(status); //错误代码提示}}else if (args[0].equals("5")) //读卡,输出十位十进制卡号{System.out.print("\n5-读10进制卡号\n");String serialnumber = CLibrary.sdtapi.idr_read_8h10d_str(); //只要卡在感应区,每次执行此方法都可以读到卡号CLibrary.sdtapi.idr_beep(38);System.out.print("读卡操作结束,返回信息:" + serialnumber+"\n");}else if (args[0].equals("6")) //读卡,输出十位十进制卡号,卡在感应区时只能读一次,需将卡从感应区盒开再放入感应区才能再次读到卡{System.out.print("\n6-读10进制卡号,只读一次\n");String serialnumber = CLibrary.sdtapi.idr_read_once_8h10d_str(); 卡在感应区时只能读一次,需将卡从感应区盒开再放入感应区才能再次读到卡CLibrary.sdtapi.idr_beep(38);System.out.print("读卡操作结束,返回信息:" + serialnumber+"\n");}}//----------------------------------------------------------------------------------错误代码提示static void PrintErrInf(int errcode) {switch(errcode){case 8:System.out.print("错误代码:8,未寻到卡,请重新拿开卡后再放到感应区!\n");break;case 21:System.out.print("错误代码:21,没有动态库!\n");break;case 22:System.out.print("错误代码:22,动态库或驱动程序异常!\n");break;case 23:System.out.print("错误代码:23,驱动程序错误或尚未安装!\n");break;case 24:System.out.print("错误代码:24,操作超时,一般是动态库没有反映!\n");break;case 25:System.out.print("错误代码:25,发送字数不够!\n");break;case 26:System.out.print("错误代码:26,发送的CRC错!\n");break;case 27:System.out.print("错误代码:27,接收的字数不够!\n");break;case 28:System.out.print("错误代码:28,接收的CRC错!\n");break;default:System.out.print("未知错误,错误代码:"+Integer.toString(errcode)+"\n");break;}}
}
Java读取ID卡卡号源码相关推荐
- C#读取RFID卡号源码
//读卡器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.23.16795b43onC5S2&id=60 ...
- Java版本多用户B2B2C商城源码-(八)消息总线(Spring Cloud Bus)
Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...
- Java在线网校学习平台源码分享
项目描述: Java在线网校学习平台源码分享 运行环境: jdk8+tomcat8+mysql5.7+eclipse(IntelliJ IDEA)+maven3.X 项目技术(必填): spring+ ...
- java接入短信平台源码
java接入短信平台源码: 向指定 URL 发送POST(GET类似)方法的请求 //param url // 发送请求的 URL //param param // 请求参数,请求参数 ...
- java连接mongodb_java连接mongodb源码解读
用mongdb也大半年了,一直是业务上的逻辑实现了就ok.然而这样并不能进步--因此今天查了查java连接mongodb驱动的源码,搜到的各种信息整合一下,方便以后深入的使用. 先贴连接数据库代码Li ...
- java B2B2C Springboot电子商务平台源码-Feign 基本使用
1. [microcloud-consumer-feign]为了可以使用到 feign 支持,需要修改 pom.xml 配置文件,引入相关依赖包:需要JAVA Spring Cloud大型企业分布式微 ...
- 死磕 java同步系列之ReentrantReadWriteLock源码解析
问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...
- 深度分析Java的ClassLoader机制(源码级别)
转载自 深度分析Java的ClassLoader机制(源码级别) Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取 ...
- JAVA b2b2c多用户商城系统源码-服务发现服务端EurekaServer微服务
一.大致介绍 1.众所周知,在现在互联网开发中,访问地址的IP和端口号是动态的,一个服务停掉再重新启用后IP和端口就可能发生了改变,所以用硬编码是肯定不行了.于是我们尝试使用新的技术来解决这一难题.需 ...
- java在线客服系统源码 springboot客服聊天源码 网页客服源码 netty通信技术,java源码
ava在线客服系统源码 springboot客服聊天源码 网页客服源码 netty通信技术,java源码 Java在线客服系统源码 企业网站客服聊天源码 网页客服源码 开发环境:Java + Spri ...
最新文章
- [转]新版.Net开发必备十大工具
- Spring Security 入门(五):在 Spring-Boot中的应用
- 谈行业数字化转型,先要搞明白ICT生态的共赢共生
- 缓解数据包丢失对WAN的影响是当务之急—Vecloud微云
- python中怎么查看二进制转换的数据_python处理二进制数据的方法
- java 正则 尖括号_使用JS正则表达式替换括号,尖括号等
- 线性回归 - 多元线性回归案例 - 分析步骤、输出结果详解、与Python的结果对比 -(SPSS建模)
- Custom Components 翻译
- 架构实战篇:使用MyBatis延迟加载模式为数据库减压,附演示实例
- 190412每日一句
- 红外反射传感器实验-传感器原理及应用实验
- Word中如何输入花体数学字符
- Servlet三大作用域
- blp和biba属于哪种访问控制_CISP官方信息安全技术章节练习二
- ROS学习记录(二)玩转海龟——海龟保姆级教程
- SLCP认证辅导,SLCPCAFv1.4和v1.3相比较共同之处在哪
- 我竟然在CSDN玩游戏??,教你利用github page在CSDN主页放置小游戏
- 简单带验证码的登陆网站破解
- 查看电脑IP端口配置/Windows Ipconfig命令教程
- HDU - 人见人爱A+B