使用PCR532(PN532)读取二代身份证uid

发布时间 2023-07-18 10:10:13作者: impluse

背景

笔者住的地方大门是智能门禁锁,需要刷身份证或指纹进出,但指纹识别不灵敏经常验证失败,使用身份证可以打开,但是身份证携带不便,更糟糕的是丢失了比较麻烦,笔者通过互联网检索资料了解到二代证是一种ic卡,是遵循ISO14443 Type B协议的卡片,这种ic卡与手机nfc的频率相同,都是13.56mhz,可以使用PN532或者ACR122U等设备进行读写。PN532比ACR122U便宜很多,淘宝拼多多通常30元就可以买到。遂在网上下单购买了一个PCR532,店家号称是PN532的升级版,实际测试发现底层驱动和配置文件里面写的都是PN532,升级的PCR532感觉像是忽悠像我这种不懂行的小白。

这里需要说明的是,笔者运气好,不了解的随意买的情况下买的是那种带usb type-c接口的长方形的PCR532板子,颜色是黑色的,在网上检索资料时,有人说有的PN532(红色方形的那款)读不到卡片,看其他人的回复说可能是这种板子设计或者质量不好,所以尽量不要买红色板子那款。

我买的长这样(下图)

 

据说读不到卡片的长这样(下图)

 

读取流程

由于不太懂行,在网络上找了很多资料,花了好几个小时最后才摸索明白,看网上说因为二代证 ATRB返回值非标,所以需要自己定制读取逻辑,这就需要驱动来操纵PN532设备,驱动网上有开源的libnfc,地址在这里GitHub - nfc-tools/libnfc: Platform independent Near Field Communication (NFC) library ,因为不知道这个库支不支持Windows版本,所以我在Linux(arm的树莓派)下进行的编译。

这里先说明一下探索的步骤

1. 下载libnfc-1.8.0库

2. 修改 libnfc/chips/pn53x.c文件中 int pn53x_reset_settings(struct nfc_device *pnd)函数

3. 使用官方example目录中的示例代码加以修改获得可读二代证uid的程序

4. 安装libnfc库所需的依赖

5. 编译libnfc

6. 读取二代证uid