公安部身份证阅读器模块SAM通讯协议
图为:公安部身份证阅读器SAM模块照片
图为:东信新一代小身份证SAM模块
支持Windows、Android、Linux、ARM、单片机等各系统二次开发。
一、通信方式:
SAM 模块提供两种通信方式:UART 和 USB,同一时间只允许选择其中一种。
二、通讯配置:
表 1 UART 接口参数说明
起始位1 位
数据位8 位
停止位1 位
校验位无
波特率默认 115200bps.可以设置为 57600bps、 38400bps、 19200bps、 9600bps
表 2 USB 接口参数说明
速度全速(12Mbps)
输入管道 0x02(Pipe2)、0x06(Pipe6)
输出管道 0x81(Pipe81)、0x85(Pipe85)
供电模式自供电
设备远程唤醒特性支持
三、数据传输格式:
UART 数据传输格式:
表3 数据输入传输帧格式
Preamble Len1 Len 2 CMD Para Data CHK_SUM
表 4 数据输出传输帧格式
Preamble Len1 Len2 SW1 S W2 SW3 Data CHK_SUM
USB 数据传输格式:
表 5 Pipe2 数据传输格式
Preamble Len1 Len2
表 6 Pipe6 数据传输格式
CMD Para Data CHK_SUM
表 7 Pipe81 数据传输格式
Preamble Len1 Len2
表 8 Pipe85 数据传输格式
SW1 SW2 SW3 Data CHK_SUM
四、各字段含义:
1、Preamble:本帧数据的帧头,5 字节,为 0xAA、0xAA、0xAA、0x96、0x69。
2、Len1、Len2:数据帧的有效数据长度,各为 1 字节。Len1 为数据长度高字节;Len2
为数据长度低字节。
输入数据长度为:CMD、Para、Data、CHK_SUM 字 段字节数之和;
输出数据长度为:SW1、SW2、SW3、Data、CHK_SUM 字段字节数之和。
3、CHK_SUM:校验和,1 字节。 数据帧中除帧头和校验和之外的数据逐字节按位异或的结果。
表 9 CMD 和 Para
命令 CMD Para
复位SAM 0x10 0xFF
SAM 状态检测 0x11 0xFF
读 SAM 管理信息 0x12 0xFF
寻找证/卡 0x20 0x01
选取证/卡 0x20 0x02
读身份证固定信息 0x30 0x01
读身份证追加信息 0x30 0x02
读卡体的管理号 0x30 0x05
设置UART 速率 0x60 参见表23
设置SAM 与RF一帧通信的最大字节数
0x61 0xFF
表 10 SW1、SW2、SW3
SW1 SW2 SW3 Data意义
0x00 0x00 0x90 和具体命令有关,可能为空操作成功
0x00 0x00 0x9F 证/卡芯片管理号寻找证/卡成功
0x00 0x00 0x10 接收数据校验和错
0x00 0x00 0x11 接收数据长度错
0x00 0x00 0x21 接收数据命令错
0x00 0x00 0x23 越权操作
0x00 0x00 0x24 无法识别的错误
XX XX 0x31 证/卡认证 SAM 失败
XX XX 0x32 SAM 认证证/卡失败
0x00 0x00 0x33 信息验证错误
XX XX 0x40 无法识别的卡类型
XX XX 0x41 读证/卡操作失败
XX XX 0x47 取随机数失败
0x00 0x00 0x60 SAM 自检失败
0x00 0x00 0x66 SAM 未经授权
0x00 0x00 0x80 寻找证/卡失败
XX XX 0x81 选取证/卡失败
0x00 0x00 0x91 证/卡中此项无内容
五、常用命令示例:
1、读安全模块号码(通常作为动态库授权): 以安全模块号:
05.01-20101129-0001228293-0296863149为例
协议:
AA AA AA 96 69 00 03 12 FF EE获取安全模块号指令(PC 到 读卡器)
AA AA AA 96 69 00 14 00 00 90 05 00 01 00 09 B8 32 01 05 BE 12 00 AD C5 B1 11 63 返回数据
AA AA AA 96 69 00 14 00 00 90
05 00 01 00
09 B8 32 01
05 BE 12 00
63
数据头数据长度 成功状态
安全模块号前两位 05. 01
从低位到高位 01 32 B8 09 转换为十进制为 0001228293 从低位到高位 00 12 BE 05 转换为十进制为 0296863149
奇偶检验位
2、检测安全模块状态(通常用来寻找读卡器连接的串口号):
AA AA AA 96 69 00 03 11 FF ED PC 到读卡器
返回成功值
AA AA AA 96 69 00 04 00 00 90 94
3、寻找身份证信息:
寻卡命令:AA AA AA 96 69 00 03 20 01 22
返 回 值:AA AA AA 96 69 00 08 00 00 9F 00 00 00 00 97
4、选取身份证信息:
选卡命令:AA AA AA 96 69 00 03 20 02 21
返 回 值:AA AA AA 96 69 00 0C 00 00 90 00 00 00 00 00 00 00 00 9C
5、读取身份证信息(文字+照片信息):
读卡命令:AA AA AA 96 69 00 03 30 01 32
返 回 值:1295 字节数据身份证信息
6 、读取身份证信息(文字+照片+指纹特征点信息)
读卡命令:AA AA AA 96 69 00 03 30 10 23
返回 值:2321 或 1809 或 1297 字节数据身份证信息
六、身份证信息(文字+照片)结构:
AA AA AA 96 69 05 08 00 00 90 01 00 04 00 +(256 字节文字信息 )+(1024 字节照片信息)+(1 字节 CRC)
七、身份证信息(文字+照片+指纹)结构:
AA AA AA 96 69 09 0A 00 00 90 01 00 04 00 04 00 +(256 字节文字信息)+
(1024 字节图片信息)+(1024 或 512 或 0 字节指纹信息)+1 字节校验位 指纹数据的具体大小由第十五和第十六字节判断 (04 00)=4*16*16=1024
(02 00)=2*16*16=512
文字信息采用 GB 13000 的 UCS-2 进行存储,各项目分配如下:
项目长度(字节)说明
姓名 30汉字
性别 2代码
民族 4代码
出生 16年月日: YYYYMMDD
住址70汉字和数字
公民身份号码36数字
签发机关30汉字
有效期起始日期16年月日:YYYYMMDD
有效期截止日期16年月日:YYYYMMDD
有效期为长期时存储
“长期”
备用36
附录一 民族代码对照表
01汉15土家29柯尔克孜43乌孜别克
02蒙古16哈尼30土44俄罗斯
03回17哈萨克31达斡尔45鄂温克
04藏18傣32仫佬46德昂
05维吾尔19黎33羌47保安
06苗20傈僳34布朗48裕固
07彝21佤35撒拉49京
08壮22畲36毛南50塔塔尔
09布依23高山37仡佬51独龙
10朝鲜24拉祜38锡伯52鄂伦春
11满25水39阿昌53赫哲
12侗26东乡40普米54门巴
13瑶27纳西41塔吉克55珞巴
14白28景颇42怒56基诺
其他外国血统97 98中国籍人士
附录二 性别代码对照表
0未知 2女
1男 9未说明
第一枚指纹信息(前 512 字节指纹数据):
pucFPMsgValue[0]字段文件头类型,记录字符“C”(43H)
pucFPMsgValue[1]指纹算法版本号
pucFPMsgValue[2]指纹采集器代码
pucFPMsgValue[3]指纹算法开发者代码
pucFPMsgValue[4] 注册结果代码,01H 表示“注册成功”,02H 表示“注册失败”,03H 表示“未注册”,09H 表示“未知”
pucFPMsgValue[5]指位代码 具体见指位说明
pucFPMsgValue[6] 指纹质量值,以 00H~64H 来表示,值 01H 表示最低质量,值 64H 表示最高质量,值 00H 表示“未知”
第二枚指纹信息(后 512 字节指纹数据):
pucFPMsgValue[512]字段文件头类型,记录字符“C”(43H)
pucFPMsgValue[513]指纹算法版本号
pucFPMsgValue[514]指纹采集器代码
pucFPMsgValue[515]指纹算法开发者代码
pucFPMsgValue[516] 注册结果代码,01H 表示“注册成功”,02H 表示“注册失败”,03H 表示“未注册”,09H 表示“未知”
pucFPMsgValue[517]指位代码 具体见指位说明
pucFPMsgValue[518]指纹质量值,以 00H~64H 来表示,值 01H 表示最低质量,
值 64H 表示最高质量,值 00H 表示“未知”
指位码说明:
pucFPMsgValue[5or517]
指位
011 右手拇指 0BH
012 右手食指 0CH
013 右手中指 0DH
014 右手环指 0EH
015 右手小指 0FH
016 左手拇指 10H
017 左手食指 11H
018 左手中指 12H
019 左手环指 13H
020 左手小指14H
097 右手不确定指位 61H
098 左手不确定指位 62H
099 其他不确定指位 63H
注:
pucFPMsgValue[0] 表示指纹数据的第一个字节数据,其他依次类推.
串口或蓝牙发送指令的流程如下:
找卡指令---------》选卡指令--------》读卡指令。