有人让我帮忙在一台运行Windows 7的电脑上配置一个智能读卡器,从而可以使政府电脑能读取到身份证信息。这使得我十分好奇如果把读卡器连接到我的Ubuntu笔记本电脑上到底会发生什么呢?我是否真能够读取身份证的信息呢?于是,我决定用泰国身份证试一试。
EZ100PU智能读卡器
我们先来看看这台读卡器。

这款FAST ID 的 EZ100PU智能卡读写器是符合ISO7816标准的。用户可以在产品页面上查看到具体的型号,但搜索EZ100PU的时候只显示了制造商可能是中国台湾的讯想科技有限公司。其他信息就没有更多了。

该USB智能读卡器随附有一张驱动光盘,其中包含了适用于Windows、Linux、Mac OS和Android系统的驱动程序,并且带有演示程序和C++、Visual Basic .NET和C# 示例代码的SDK。正如我们将在下面进一步要看到的,该产品无需Linux驱动程序,因为它是开箱即用的。

该板(RX-N99B-2)的设计非常简单,只有主芯片:Alcor AU9560 USB智能卡读取器。也可以在PCB的左下方看到智能卡插槽。不过,该板的另一侧就只有一个智能卡插槽了。

在Ubuntu 18.04系统使用智能读卡器
将读卡器连接到笔记本电脑,然后插入一张泰国身份证(接触式智能卡)。

好消息是,该智能卡被读卡器内核自动检测为EMV智能卡了。
1 2 3 4 5 |
[ 3024.839989] usb 3-2: new full-speed USB device number 3 using xhci_hcd [ 3025.020314] usb 3-2: New USB device found, idVendor=058f, idProduct=9540, bcdDevice= 1.20 [ 3025.020317] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 3025.020320] usb 3-2: Product: EMV Smartcard Reader [ 3025.020322] usb 3-2: Manufacturer: Generic |
在这里我需要从网络上搜索有关信息。我在Linuxmint上找到了一篇介绍如何操作读卡器并读取西班牙身份证信息的文章。
在这里需要安装一些软件包,注意:并不是所有包都需要,主要是pcscd和pcsc-tools:
1 |
sudo apt install libccid pcscd pinentry-gtk2 pcsc-tools libpcsclite-dev libreadline-dev coolkey |
现在,我在读卡器上运行“scan”程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
pcsc_scan PC/SC device scanner V 1.5.2 (c) 2001-2017, Ludovic Rousseau <ludovic.rousseau@free.fr> Using reader plug'n play mechanism Scanning present readers... 0: Alcor Micro AU9560 00 00 Sat Aug 10 10:23:50 2019 Reader 0: Alcor Micro AU9560 00 00 Card state: Card inserted, ATR: 3B 79 96 00 00 54 48 20 4E 49 44 20 31 32 ATR: 3B 79 96 00 00 54 48 20 4E 49 44 20 31 32 + TS = 3B --> Direct Convention + T0 = 79, Y(1): 0111, K: 9 (historical bytes) TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU 250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s TB(1) = 00 --> VPP is not electrically connected TC(1) = 00 --> Extra guard time: 0 + Historical bytes: 54 48 20 4E 49 44 20 31 32 Category indicator byte: 54 (proprietary format) Possibly identified card (using /usr/share/pcsc/smartcard_list.txt): NONE Updating /home/jaufranc/.cache/smartcard_list.txt using http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt Possibly identified card (using /home/jaufranc/.cache/smartcard_list.txt): 3B 79 96 00 00 54 48 20 4E 49 44 20 31 32 Thai (passport) |
我检测到了Alcor Micro AU9560,并且它不知道怎么地就检测到了泰国护照,是不是因为用来创建卡的程序设置有错误?
smartcard_list.txt 中还有其他几个专门用于泰国身份证的代码。我想可能需要检查该文件来查看所有支持的卡的类型。以下是带有“Thai”的字符串,仅供参考:
Thai GSM UICC (Telecommunication)
Thai id card (Other)
Seven-Eleven Value Card / Smart Purse – Thailand (Other)
Thailand National ID (eID)
Thai National ID Card (eID)
Thai National ID Card (eID)
Thai (passport)
Truemove H Thailand (Telecommunication)
True Money Touch Sim (Thailand)
Seven-Eleven Value Card / Smart Purse – Thailand (Contactless) (Other)
Thai Passport 2010, 2011
Thai Passport 2005
小标题:读取并解码身份证数据
我目前可以使用读卡器读取硬件和卡。一切看起来也都还不错。所以,如果能够读取和解码泰国身份证内的数据就更好了。而我刚好在GitHub上看到,一个叫做Bouroo的用户使用Python和NodeJS编程语言编写代码就做到了这一点。
我接下来会用Python脚本来做这件事。但首先需要要做的是安装一些依赖包:
1 2 |
sudo apt install swig python3-pip libncurses-dev pip install readers pyscard |
现在,运行该脚本,它会逐步提取数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
python thai-id-card.py Available readers: (0, 'Alcor Micro AU9560 00 00') Select reader[0]: 0 Using: Alcor Micro AU9560 00 00 ATR: 3B 79 96 00 00 54 48 20 4E 49 44 20 31 32 Select Applet: 61 0A CID: TH Fullname: EN Fullname: Date of birth: Gender: Card Issuer: Issue Date: Expire Date: Address: |
我从输出中删除了个人信息,可以确定的是屏幕上的确正确显示了身份证上的所有内容了,包括泰语的姓名和地址。该Python脚本还将存储在ID卡中的照片保存下来了,并命名为<CID>.jpg,其中的CID是身份证编号。

文章翻译者:Rita Wang,CNX中文站翻译人员,文字功底扎实,将科技文献以通俗易懂的形式呈现给读者,对开源硬件、AI、IoT等领域多有涉猎。