标签归档:二代身份证

二代身份证读卡器开发小结

最近用RC531开发了一款可以同时读IC卡和身份证的读卡器。网上读IC卡的程序很多,没什么好介绍的。这里总结下读身份证要注意的几个问题。

我做的身份证读卡器只是读身份证的ID号,身份证的内部内容是无法读出的。

身份证读卡器的程序流程如下:

先发送0x05,0x00,0x00询卡命令后,身份证返回12字节卡类型代码,不同身份证返回的数据不一样。比如我对两个身份证发送询卡命令后分别返回

0x50 0x00 0x00 0x00 0x00 0xd1 0x03 0x86 0x0c 0x00 0x80 0x80

0x50 0x00 0x00 0x00 0x00 0xd1 0x03 0x86 0x07 0x00 0x80 0x90

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

最后发送GUID命令:0x00 0x36 0x00 0x00 0x08,身份证会返回10字节数据,其中前8字节就是身份证的唯一ID,后两字节是0x90 0x00。可以用后两字节来判断得到的是否是身份证ID。

要注意的是二代身份证是TYPEB卡,但是用TYPEB卡的HALT命令对它不起作用。把身份证放在读卡器上会一直读卡。这个问题只能用软件解决,比如在500ms内检测到同一个ID号,只输出一次韦根信号。

我在测试时发现,有时把身份证放在读卡器上,会读不到卡。但是程序是一直循环发送询卡命令,SELECT命令,GUID命令的。我分析原因应该是身份证内部芯片死机了。因为身份证内部电路是靠射频供电的,如果读卡器一直发送射频信号,当身份证内部芯片死机后,由于外部一直有射频信号,所以内部芯片一直有电压,芯片也一直维持死机状态,即使不断重新发送命令也无济于事。解决这个问题的办法就是在每次发送询卡命令,SELECT命令,GUID命令前,先关闭射频信号,延时20ms后再打开射频信号,再延时10ms,然后发送命令。关闭射频信号的目的是让身份证内部电路断电,重新发送射频信号后,让芯片复位。这样修改后每次都能读到ID号。

继续阅读