公安部身份证阅读器模块SAM通讯协议

图为:公安部身份证阅读器SAM模块照片

图为:东信新一代小身份证SAM模块

支持WindowsAndroidLinuxARM、单片机等各系统二次开发。

一、通信方式:

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]  表示指纹数据的第一个字节数据,其他依次类推.

串口或蓝牙发送指令的流程如下:

找卡指令---------》选卡指令--------》读卡指令。

公安部身份证阅读器模块SAM通讯协议相关推荐

  1. IDR221F-H身份证阅读器模块基于国产UOS 系统(Linux内核)下的调用操作说明

    IDR221F-H身份证阅读器模块除支持Win系列操作系统,也支持国产操作系统,如通信UOS.银河麒麟Kylin.中标麒麟.Ubuntu.鸿蒙等操作系统,在基于UOS 系统(Linux内核)下的应用, ...

  2. python通讯卡_如何使用树莓派连接EM-18RFID阅读器模块 并通过Python脚本从一些RFID卡访问信息...

    概述 RFID或射频识别是一种通过电磁波进行通信的方式(射频波,具体而言). RFID标签和RFID卡通常用于身份验证和访问控制. 您可能已经看到人们在办公室入口处刷身份证.身份证实际上是具有雇员个人 ...

  3. 居民身份证阅读器产品开发学习心得(再谈标准-软件-协议)

    说到一些产品化的东西,之前就写过一篇关于标准化的文章,当然作为我本人而言,也是在不断的学习中,理解标准,则有利于未来转型走向产品以及市场相关的岗位,因为我不单单是要了解怎么做?(这是技术层面),我还需 ...

  4. JNA二次开发华视身份证阅读器

    JNA二次开发华视身份证阅读器 前言 添加依赖 SDK资料 编写代码 遇到的问题(坑) 前言 这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative,其中JNA调用 ...

  5. Kotlin之身份证阅读器(华视)二次开发

    一.简介 身份证阅读器使用场景比较多,围绕它按照自己的需求进行二次开发的也不少,我这次也是围绕身份证阅读器进行二次开发,不过使用的是kotlin作为开发的语言,资料比较少,参考了java的开发设计JA ...

  6. 嵌入式OCR+RFID识别电子护照阅读器模块MRZ码电子证件识别模组的应用与攻略

    嵌入式OCR+RFID识别电子护照阅读器模块|MRZ码电⼦证件验证识别模组是一款USB通讯模式,体积小巧.便于安装,方便嵌入至各类终端设备中,适用于出境游旅行社.海关检查.口岸出入境检查.使领馆签证登 ...

  7. 精伦身份证阅读器php_精伦IDR210-1(免驱)身份证阅读器

    产品概述 精伦IDR210-1身份证读卡器是一款多功能 .免装驱动程序的射频卡读写器,可根据需求配置不同部件实现不同射频卡的读取和写入功能. 精伦IDR210-1配置了专用身份证安全控制模块(SAM) ...

  8. 华视100UC 身份证阅读器 Java

    华视100UC 身份证阅读器 Java 哪位大佬有64位可用的dll文件,施舍给小弟吧,万分感谢 功能 环境 个人想法(有不对的地方希望大佬指正) 对于dll文件的想法 目录结构 1. pom.xml ...

  9. C#如何读取身份证阅读器

    不同的身份证读卡器,其动态库不一样,新中新二代身份证阅读器,型号:DKQ-A16D,eg: using System; using System.Collections.Generic; using  ...

最新文章

  1. linux 内核互斥体,Linux 内核同步(六):互斥体(mutex)
  2. mysql密码修改脚本
  3. gcc 5.2.0 编译安装笔记-20151110
  4. Ubuntu使用技巧和注意点
  5. 图说数据中心蒸发节能技术
  6. FileUploadUtil
  7. Emoji表情符号兼容方案(适用ios,android,wp等平台)
  8. ecs硬盘数据迁移_阿里云ECS新增数据盘以及迁移数据方法
  9. anglar ajax执行2次的原因,AngularJS与Ajax表单提交需要单击两次
  10. qt翻译--QDragMoveEvent拖放类
  11. 一点关于MD5计算的封装
  12. 第二天linux,yum源配置和ftp部分设置
  13. Ext2 常见界面界面(grid分页、窗口布局、下拉框级联)
  14. SU处理野外地震数据常用命令
  15. .net微信开发吐血总结
  16. 数据可视化:基本图表
  17. 全球物联网产品信息安全国际技术规范(ISO15408体系)——《物联网安全通信模块信息安全技术规范》(IoT Secure Communications Module Protection Profi
  18. 合肥工业大学计算机与信息学院导师介绍,合肥工业大学计算机与信息学院导师介绍:方宝富...
  19. 【C++】三大易混概念之覆盖
  20. 开发微信小程序都需要哪些资质?

热门文章

  1. 计算机网络(三)——TCP/IP协议
  2. 【STM32】STM32F4 CAN2只能发送无法接收问题解决
  3. [C++] - 中的复制初始化(copy initialization)
  4. Linux中sudo命令设置,Linux下sudo命令的配置与使用方法
  5. 【JAVA SE】第四章 变量和方法
  6. Spring-第2天
  7. 2018.09.19 atcoder AtCoDeer and Election Report(贪心)
  8. linux监控采集项
  9. 爬虫基础12(框架Scrapy中间件)
  10. uva 714 Copying Books