NfcB读取身份证UID

先发送05 00 00询卡命令后,身份证返回12字节卡类型代码,不同身份证返回的数据不一样。比如对两个身份证发送询卡命令后分别返回
50 00 00 00 00 d1 03 86 0c 00 80 80

50 00 00 00 00 d1 03 86 07 00 80 90

询卡成功后,发送SELECT命令:1d 00 00 00 00 00 08 01 08 对二代身份证进行选卡操作。
这时身份证返回的第一个字节应该等于SELECT命令的最后一个字节08,根据这个条件来判断SELECT命令是否操作成功。

最后发送GUID命令:00 36 00 00 08,身份证会返回10字节数据,其中前8字节就是身份证的唯一ID,后两字节是90 00(SW1 SW2)。
=================================
二代证是应答标准的REQB指令的,但Attrib指令是非标的,
二代证的唯一UID可以通过下面的步骤简单读取,
1. PCD发送REQB命令: 05 00 00 二代证收到后会发送ATQB(12 bytes)应答。
例:50 00 00 00 00 d1 03 86 0c 00 80 80
2.PCD发送非标Attrib命令
1d 00 00 00 00 00 08 01 08
二代证返回应答:08 //这里返回08不能认为是错误的,ISO14443标准返回为00

3.PCD发送读取UID命令
00 36 00 00 08 二代证返回应答:xx xx xx xx xx xx xx xx 90 00

Sent bits: 05 00 00
Received bits: 50 00 00 00 00 d1 03 86 0c 00 80 80
Sent bits: 1d 00 00 00 00 00 08 01 08
Received bits: 08
Sent bits: 00 36 00 00 08
Received bits: xx xx xx xx xx xx xx xx 90 00
===========================
读二代证的 寄存器配置信息
WriteRegPN532(CIU_MODE, 0xFF);
WriteRegPN532(CIU_TXAUTO, 0x00);
WriteRegPN532(CIU_TXMODE, 0x03);
WriteRegPN532(CIU_RXMODE, 0x03);
WriteRegPN532(CIU_TYPEB, 0x03);
WriteRegPN532(CIU_DEMOD, 0x4D);
WriteRegPN532(CIU_GSNON, 0xFF);
WriteRegPN532(CIU_CWGSP, 0x3F);
WriteRegPN532(CIU_MODGSP, 0x18);
WriteRegPN532(CIU_RXTHRESHOLD, 0x4D);
WriteRegPN532(CIU_MODWIDTH, 0x68);
WriteRegPN532(CIU_MANUALRCV,0x10);

发送命令 后面2字节是CRC校验
05 00 00 71 ff
1d 00 00 00 00 00 08 01 08 f3 10
00 36 00 00 08 57 44
============================
由于二代证的ATTRIB操作非标,所以不能直接用PN532提供的InListPassiveTarget等上层指令来选卡,
只能靠自己设置寄存器,并通过InCommunicateThru底层通讯,发送ATQB和ATTRIB,完成选卡操作。
—————————-
二代证的ATQB信息里会指明使用了非标准协议,所以 通常的标准type B协议不改造可能就会拒读二代证(类似于目前的普通读写器,只有REQB和ATQB的交互,因为得知卡片后续采用专有协议,而读写器如果不支持,就会停止进一步交互或者重复发送REQB),所以CLF的代码必须要修改以支持读取二代证的。
非接触式前端(CLF)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注