失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > JAVA有关NFC读卡器读取数据

JAVA有关NFC读卡器读取数据

时间:2023-01-13 16:32:56

相关推荐

JAVA有关NFC读卡器读取数据

1.简单讲对NFC读卡的认识:

读卡器ACR122,是由香港acs开发的一款NFC取卡器,分为接触式和非接触式两种

CPU卡:读取的CPU卡文件结构是由MF根目录其中包括秘钥文件,持卡人基本数据文件,目录数据文件以及秘钥文件DF01下的个个子文件构成

2.一般对硬件的访问是由4个过程组成open,init,read(write),close,但是JAVA 包javax.smartcardio做了封装,我们只需要进行指令的输入和输出即可。

3.代码:

public ResponseAPDU exec(CardChannel ca, CommandAPDU command) {ResponseAPDU responseAPDU = null;try {TerminalFactory factory = TerminalFactory.getDefault();// 得到一个默认的读卡器工场CardTerminal cardTerminal = factory.terminals().getTerminal("ACS ACR122 0");// 从工厂获得插在电脑上的读卡器列表,get读卡器列表cardTerminal.waitForCardPresent(0L);// 等待放置卡片Card card = cardTerminal.connect("*");// 连接卡片cardChannel = card.getBasicChannel();// 打开通道responseAPDU = cardChannel.transmit(command);} catch (CardException e) {e.printStackTrace();}return responseAPDU;}

解释一下:

其中CardChannel为卡的执行实例,CommandAPDU是有关的指令。

详见:/javase/6/docs/jre/api/security/smartcardio/spec/javax/smartcardio/CommandAPDU.html

解释一下这几个参数嗾使什么:

CPU卡的命令报文基本分头和体,其中head中包括CLA(长度1个byte),INS(长度1个byte),P1(参数1,长度1byte),P2(参数2,长度1个byte)

命令体 命令体中各项是可选的。

Lc 命令数据域中 DATA 的长度,该长度不可超过 255 字节。

Data 命令和响应中的数据域 Le 响应数据域中期望数据的长度。

Le=00,表示需要最大字节数, 该长度不可超过 255 字节。

XX ⇒ 1 个字节 16 进制数

XXXX ⇒ 2 个字节 16 进制数

XX...XX ⇒ 未知个字节 16 进制数

好了,知道了这些就可以构造命令进行读卡了

首先,来一个简单操作

byte[] paramData = new byte[]{0x3F, 0x00};//DATACommandAPDU selecMF = new CommandAPDU(0x00, 0xA4, 0x00, 0x00, paramData, 0x2);//0X02(Lc)

上面这个实例是读卡的指针指向MF根路径,相当于我们Windows选择了MF文件夹一样

查看返回结果

if (!Integer.toHexString(selectMFResp.getSW()).equals("9000")) {logger.error("Select 1001 response:{}", selectMFResp.toString());cardChannel.close();return null;}

返回结果9000,是执行成功,我们的命令执行成功了,

ResponseAPDU.getData()获得返回数据,返回的数据是字节数组,需要转换成16进制的String进行读取。

图显示部分返回码的含义:

好了今天就写这么多,下次再详细研究

如果觉得《JAVA有关NFC读卡器读取数据》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。