身份证阅读器通信协议

数据输入格式
Preamble (5个字节,AA AA AA 96 69, 前3个字节用于 帧同步, 后面2个字节,表示帧开始)
数据长度 (2个字节,高位在前,低位在后, 数据长度是指 本帧之后的所有有效数据的长度,CMD+Para+Data+CHKSUM)
CMD (命令,1个字节)
Para (参数,1个字节)
Data (数据,n个字节)
CHK_SUM (校验和,1个字节, 数据帧中除帧头和校验和之外的数据逐字节按位异或的结果)


数据输出格式:
Preamble (5个字节,跟输入格式中的一样,也是 AA AA AA 96 69)
数据长度 (2个字节,高位在前,低位在后, 有效数据=SW1+SW2+SW3+Data+CHK_Sum)
SW1,SW2(各1字节, 阅读器转发证卡 回应的APDU中的SW1,SW2)
SW3 (1字节, 阅读器自身的状态码)

说明命令CMD参数Para
复位10FF
状态检测11FF
读SAM模块编号12FF
寻找身份证2001
选取身份证2002
读取基本信息3001
读取最新追加信息3003
设置串口速率115200 bps6000
设置串口速率57600bps6001
设置串口速率38400bps6002
设置串口速率19200bps6003
设置串口速率9600bps6004
命令集

状态

SW1 SW2 SW3Data说明
00 00 90和具体命令有关,可能为空操作成功
00 00 9F卡的IIN返回找卡成功信息
00 00 10接收业务终端数据的校验和错误
00 00 11接收业务终端数据的长度错误
00 00 21接收业务终端的命令错误,包括命令中的各种数值或者逻辑搭配错误
00 00 24无法识别的错误
XX XX 31身份证对阅读器认证失败
00 00 32阅读器对身份证认证失败
00 00 33信息验证错误
00 00 40错误的卡
XX XX 41读身份证失败
XX Xx 47取随机数失败
00 00 60阅读器自检失败,不能接收任何命令
00 00 66阅读器未经过授权,无法使用
00 00 80 搜寻身份证失败
XX XX 81选取身份证失败
00 00 91没有这项内容

读取基本信息的响应

aaaaaa9669 (Preamble)
0508 (长度)
00 00 90 (SW1 SW2 SW3)

data(长度为1284字节的数据, 1284+1+3=1288=0x508)

chksum

data的内容

0100 (文字信息的长度, 256字节)
0400 (照片的长度)

姓名 (30个字节), 也就是说姓名最长的为15个字,不足的补空格

性别(2个字节) 男=1, 女=0

民族 (4个字节)

出生日期(16个字节)

住址(70个字节,最多35个字,不足的补空格)

身份证号(36字节)

签发机关(30个字节,最多15个字,不足的补空格)

有效起始 (16个字节)

有效结束( 16个字节, 年满46周岁的,此处为汉字”长期”, 补空格)

长度36的备用字节, 用空格填充


校验和算法:

def calculate_xor_checksum(message):
    checksum = 0
    for e in message:
        checksum ^= e
    return checksum

发表回复

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