【源码】安卓微信小程序 读取NFC卡信息(MifareClassic )

本文所介绍之微信小程序读卡功能基于互联网已公开github仓库代码改编实现,在原基础上增加了多个区块内容读取功能,以及部分交互优化,删除了Ndef卡操作相关,来源地址(顺便BS下一些某C**N站上的付费下载,之前辛苦赚的积分长时间没用该站导致”清零“了):https://github.com/mangk/NFCTools-MiniProgram

如果你只是想要一个可以快速跑起来的demo不想要看下面可能无关紧要的啰嗦的介绍,那么可以直接去我的仓库来下载改版后的:https://github.com/joolan/wx-m1-card

好了,到这里就可以结束了,一切的源码见上面github

IC卡读卡的几个注意事项:

1、空白IC卡的密码一般是FFFFFFFFFFFF,如果是一些会员卡之类的基本都是有密码,如果不知道密码是不能读卡的。

2、不管是微信小程序还是APP,如果要读IC卡,需要按扇区校验密码后才能读/写;如果你想要读取多个扇区的内容,那么每次都需要先校验该扇区密码(即使你每个扇区密码都一样也得先校验然后再读取)

3、微信小程序读卡是异步的,如果你想要读取多个扇区的内容,必须在代码逻辑层面进行控制,也就是说在读取到第一个目标区块内容结果的后续代码里面再去校验密码读取下一个区块内容。这也是我改动源项目代码花费时间最多的地方,之前是尝试把读卡的整体封装成一个函数,然后分别调用2次来实现不同扇区块内容的读取,事实证明是不行的。

4、IC卡的密钥A、密钥B这些可以自己尝试看看,以及IC的扇区、块号这些概念建议还是了解下先。微信这边一张IC卡是读取第0-63块的内容

3、微信小程序读取NFC目前只支持安卓,IOS是不支持的(我也找了很久,官方是真的不支持)。

本项目之我对微信小程序读卡逻辑的理解:

1、微信小程序官方介绍读卡能力的文档很简陋,我看完是感觉跟没看一样,https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.html

其实读写最核心的就是官方的这几句话,MifareClassic.transceive直接发送按指定格式整理后的数据即可,关于指令的说明可参考:https://developers.weixin.qq.com/community/develop/article/doc/0008ea3fa80b881383cf54bcd51813

对于MifareClassic的分块读写

指令 0x30 + 块号 可以用于读取某个块的数据
指令 0xA0 + 块号 + 待写入数据 可以用于往某个块写入数据

3、【密码验证】验证密码的数据格式A密码验证指令0x60, B密码验证指令0x61(为了便于展示指令格式及理解,下面截图的代码非文章开头提供的源码)

4、【块数据读取】验证密码通过后即可发送指定格式数据来读取数据(为了便于展示指令格式及理解,下面截图的代码非文章开头提供的源码)

上面的就变成读取第扇区2第二块(必须与验证密码通过的是同一个扇区): var arr=[0x30,0x09]

5、【块数据写入】指令0xA0+块号+数据,注意数据必须是16位长度,不能多也不能少不然会失败(因为每个块固定就是这么长的数据)

var arr02 = [0xA0, 0x09, 第0个数据0x10,第1个数据0x10,……,第15个数据0x10]

[指令(0xA0),块号(0x09),…16个字节].length = 18, 内容不够的填充FF或者填充其他的内容, 数组必须凑够18个元素

6、注意一些数据转换Int8Array、Uint8Array、hex、进制转换这些需要掌握一下,不然可能会遇到一些莫名其妙的事情。

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/weixin-nfc-mifareclassic/

赞赏

微信赞赏支付宝赞赏

发表评论