读卡器介绍: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卡卡号源码相关推荐

  1. C#读取RFID卡号源码

    //读卡器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.23.16795b43onC5S2&id=60 ...

  2. Java版本多用户B2B2C商城源码-(八)消息总线(Spring Cloud Bus)

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  3. Java在线网校学习平台源码分享

    项目描述: Java在线网校学习平台源码分享 运行环境: jdk8+tomcat8+mysql5.7+eclipse(IntelliJ IDEA)+maven3.X 项目技术(必填): spring+ ...

  4. java接入短信平台源码

    java接入短信平台源码: 向指定 URL 发送POST(GET类似)方法的请求 //param url //     发送请求的 URL //param param //     请求参数,请求参数 ...

  5. java连接mongodb_java连接mongodb源码解读

    用mongdb也大半年了,一直是业务上的逻辑实现了就ok.然而这样并不能进步--因此今天查了查java连接mongodb驱动的源码,搜到的各种信息整合一下,方便以后深入的使用. 先贴连接数据库代码Li ...

  6. java B2B2C Springboot电子商务平台源码-Feign 基本使用

    1. [microcloud-consumer-feign]为了可以使用到 feign 支持,需要修改 pom.xml 配置文件,引入相关依赖包:需要JAVA Spring Cloud大型企业分布式微 ...

  7. 死磕 java同步系列之ReentrantReadWriteLock源码解析

    问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...

  8. 深度分析Java的ClassLoader机制(源码级别)

    转载自 深度分析Java的ClassLoader机制(源码级别) Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取 ...

  9. JAVA b2b2c多用户商城系统源码-服务发现服务端EurekaServer微服务

    一.大致介绍 1.众所周知,在现在互联网开发中,访问地址的IP和端口号是动态的,一个服务停掉再重新启用后IP和端口就可能发生了改变,所以用硬编码是肯定不行了.于是我们尝试使用新的技术来解决这一难题.需 ...

  10. java在线客服系统源码 springboot客服聊天源码 网页客服源码 netty通信技术,java源码

    ava在线客服系统源码 springboot客服聊天源码 网页客服源码 netty通信技术,java源码 Java在线客服系统源码 企业网站客服聊天源码 网页客服源码 开发环境:Java + Spri ...

最新文章

  1. [转]新版.Net开发必备十大工具
  2. Spring Security 入门(五):在 Spring-Boot中的应用
  3. 谈行业数字化转型,先要搞明白ICT生态的共赢共生
  4. 缓解数据包丢失对WAN的影响是当务之急—Vecloud微云
  5. python中怎么查看二进制转换的数据_python处理二进制数据的方法
  6. java 正则 尖括号_使用JS正则表达式替换括号,尖括号等
  7. 线性回归 - 多元线性回归案例 - 分析步骤、输出结果详解、与Python的结果对比 -(SPSS建模)
  8. Custom Components 翻译
  9. 架构实战篇:使用MyBatis延迟加载模式为数据库减压,附演示实例
  10. 190412每日一句
  11. 红外反射传感器实验-传感器原理及应用实验
  12. Word中如何输入花体数学字符
  13. Servlet三大作用域
  14. blp和biba属于哪种访问控制_CISP官方信息安全技术章节练习二
  15. ROS学习记录(二)玩转海龟——海龟保姆级教程
  16. SLCP认证辅导,SLCPCAFv1.4和v1.3相比较共同之处在哪
  17. 我竟然在CSDN玩游戏??,教你利用github page在CSDN主页放置小游戏
  18. 简单带验证码的登陆网站破解
  19. 查看电脑IP端口配置/Windows Ipconfig命令教程
  20. HDU - 人见人爱A+B

热门文章

  1. 天梯赛题目练习——查询水果价格(附带测试点)
  2. 智能门锁电路图_智能门锁原理图,智能锁工作原理科普
  3. html字体加粗且变色,简单的html代码 加粗 加亮 字型加大 变色 分别是写什么`
  4. Datawhale团队第五期录取名单!
  5. HDU P4699 Editor
  6. [HDOJ4699]Editor
  7. 产品思维 的四大组成部分
  8. devops学习(十一) 构建主分支--触发器--钉钉通知
  9. 盘点各专业到古代都能干些啥
  10. ASP.NET Core 自定义中间件