目录

一、身份证读卡器使用SAM协议使用以下报文进行通讯:

1、寻找身份证信息

2、选取身份证信息

3、读取身份证信息(文字+照片信息)

4 、读取身份证信息(文字+照片+指纹特征点信息)

二、程序介绍

1、数据发送

2、数据转换

3、数据接收


最近做了个项目,使用Linux Arm主板终端机器,这个终端的一项功能是使用身份证读卡器读取人员的身份证号,Linux Arm并未提供Linux驱动,因此选择使用华视100D串口的身份证读卡器,此身份证读卡器可以通过SAM协议进行数据通讯,获取证件信息

一、身份证读卡器使用SAM协议使用以下报文进行通讯:

1、寻找身份证信息

寻卡命令: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

2、选取身份证信息

选卡命令: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

3、读取身份证信息(文字+照片信息)

读卡命令:AA AA AA 96 69 00 03 30 01 32

返 回 值:1295 字节数据身份证信息

4 、读取身份证信息(文字+照片+指纹特征点信息)

读卡命令:AA AA AA 96 69 00 03 30 10 23

返回 值:2321 或 1809 或 1297 字节数据身份证信息

注:上述4条报文中,第一条和第二条再每次发送时需要每次都发送,第三条和第四条任选其一进行发送即可获得证件得信息数据。

二、程序介绍

1、数据发送

发送数据串
byte[] by = strToHexByte("AAAAAA96690003200122");
SendBuff(by, by.Length, MultiPortClass.COM1);
by = strToHexByte("AAAAAA96690003200221");
SendBuff(by, by.Length, MultiPortClass.COM1);
by = strToHexByte("AAAAAA96690003300132");//返回长度1295*2
SendBuff(by, by.Length, MultiPortClass.COM1);
by = strToHexByte("AAAAAA96690003301023");//返回长度1297*2
后面2条只需选择其中之一即可

2、数据转换

①、byte转16进制字符串

        /// <summary>/// Byte转16进制字符串/// </summary>/// <param name="bytes"></param>/// <returns></returns>public string byteToHexStr(byte[] bytes){string returnStr = "";if (bytes != null){for (int i = 0; i < bytes.Length; i++){returnStr += bytes[i].ToString("X2");}}return returnStr;}

②、16进制转byte

        /// <summary>/// 16进制字符串转Byte/// </summary>/// <param name="hexString"></param>/// <returns></returns>private byte[] strToHexByte(string hexString){hexString = hexString.Replace(" ", "");if ((hexString.Length % 2) != 0)hexString += " ";byte[] returnBytes = new byte[hexString.Length / 2];for (int i = 0; i < returnBytes.Length; i++)returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);return returnBytes;}

3、数据接收

接收信息使用GB13000的标准进行解析,256个字节分别下表所述,编码协议采用UCS-2,C#程序可以通过Encoding直接解码,程序只进行了姓名和身份证号码的解析,照片的为后面的1024字节,由于照片解码未提供源码,照片的解码通过SDK的方式进行解码

解码部分代码

string str = list[0].Substring(14 * 2, 30 * 2);
string _xm = Encoding.GetEncoding("UCS-2").GetString(strToHexByte(str)).ToString().Trim();
str = list[0].Substring((14 + 30 + 2 + 4 + 16 + 70) * 2, 36 * 2);
string _sfzmhm = Encoding.GetEncoding("UCS-2").GetString(strToHexByte(str)).ToString().Trim();
string zp = list[0].Substring((14 + 256) * 2, 1024 * 2);
byte[] zpbyte = strToHexByte(zp);
string _zpbase64 = Convert.ToBase64String(zpbyte);

C# 使用串口分析SAM协议,读取身份证信息相关推荐

  1. 身份证读取设备开发解决方案:2、Android下通过usb转串口读取身份证信息

    身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 文章目录 身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 1. 前言 2. 准备 3. ...

  2. 用python读取身份证信息的功能分析与实现,兼述python调用dll的方法

    背景 有这样一个需求,要求能自动读取用户的身份证信息.如果是一代身份证,这个功能恐怕只能通过图像识别的办法来解决了.不过现在二代身份证已经很普及.客户要求能读二代身份证就可以了. 现在二代身份证阅读器 ...

  3. web读取身份证信息(java语言)

    其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持).如果支持我们需要和他们拿到他们底层的jar包和api(接口文档),要是有demo就更好 ...

  4. 基于华视身份证读卡器读取身份证信息的Android demo

    项目概述 本Demo需要华视的身份证读卡器,连接Android机器设备,当身份证读卡器读取到身份证信息后,立马展示出身份证信息数据.得到身份证的姓名.照片.出生年月等数据. 项目概述 本Demo需要华 ...

  5. 浏览器使用华视电子设备读取身份证信息

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家. 对人工智能感兴趣或者想了解的小伙伴,可以点击跳转到网站一起学习哟. https://www.captainai.ne ...

  6. VUE实现华视身份证阅读器读取身份证信息

    VUE实现华视身份证阅读器读取身份证信息 话不多上直接上代码,写的不怎么规范多多包涵,我是在模态框实现的,在这里就只提供模态框代码. 最后附上华视身份证阅读器安装文件和浏览器插件链接: [https: ...

  7. VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)

    本文是用了vue+element来实现华视身份证读卡器读取身份信息的,当然在开发之前要做好前提准备,就是厂家提供对应设备的api和安装对应的驱动.本文通过两种方法来实现读取信息,第一种是点击按钮读取信 ...

  8. 基于Android NFC传感器读取身份证信息demo

    摘要:通过导入开发包sdk开发基几Android NFC设备读取身份证信息 1. 开发条件: 1)鱼住往来科技的身份验证sdk :下载地址:https://www.yzfuture.cn/views/ ...

  9. android通过USB读取身份证信息

    一.USB的通信流程 搜索设备->建立连接->通信 , 全部代码请 "戳这" 1.搜索设备 /*** 获取目标UsbDevice* @param view*/publi ...

最新文章

  1. 最长回文子序列(LPS)
  2. 全面解读java虚拟机
  3. VLC详细的使用说明以及配置说明综合示范实例精通VLC开发
  4. java jdbc is一个会话_java_JdbcUtilis_单实例
  5. java 重启tomcat_linux下重启tomcat的命令
  6. 首秀双折叠屏手机却被友商炮轰 小米回应:悍然碰瓷!
  7. Python版组合数计算方法优化思路和源码
  8. springboot上传文件过大,全局异常捕获,客户端没有返回值
  9. bom csv java_Java系列化与反系列化
  10. 用WIN PE通过修改系统注册表修复因盘符错乱而导致系统无法启动问题
  11. 服务器虚拟化对硬件有要求,虚拟主机对硬件有要求吗
  12. java jdbc 批处理_JDBC的批处理操作
  13. [BZOJ1597]土地购买
  14. Spring Cache key生成策略, 不要想当然认为是全类名+方法+参数
  15. 输入年月日实现计算这是一年的第几天
  16. SkyEye硬件模拟平台
  17. 易天光模块交期漫画故事
  18. python爬取微博数据词云_爬虫篇:使用Python动态爬取某大V微博,再用词云分析...
  19. nodejs安装、解决下载速度慢、idea中用node引入vue
  20. mysql查询未使用索引,监控MySQL中未使用的索引

热门文章

  1. 利用淘宝云盘作为图床
  2. Dijkstra(迪杰特斯拉)算法(极简版)
  3. CyberLink PowerDVD 9 简体中文版+注册码下载
  4. 上班摸鱼神器:盯盘小工具 实时监视股票行情走势 电脑PC端
  5. ASP.NET中table控件去掉 td 之前的间隔
  6. HP EVA系列存储raid结构原理研究
  7. 普通下载url与迅雷快车旋风下载地址转换原理分析
  8. 解决MYSQL导入(Excel等)或者插入中文失败
  9. 更新conda出现:PackageNotInstalledError: Package is not installed in prefix. 的解决
  10. 美国医院管理职业化之路