C# 使用串口分析SAM协议,读取身份证信息
目录
一、身份证读卡器使用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协议,读取身份证信息相关推荐
- 身份证读取设备开发解决方案:2、Android下通过usb转串口读取身份证信息
身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 文章目录 身份证读取设备开发解决方案:2.Android下通过usb转串口读取身份证信息 1. 前言 2. 准备 3. ...
- 用python读取身份证信息的功能分析与实现,兼述python调用dll的方法
背景 有这样一个需求,要求能自动读取用户的身份证信息.如果是一代身份证,这个功能恐怕只能通过图像识别的办法来解决了.不过现在二代身份证已经很普及.客户要求能读二代身份证就可以了. 现在二代身份证阅读器 ...
- web读取身份证信息(java语言)
其实实现读取身份证信息,代码其实没有多难,关键需要和硬件的厂商协调好,看他们的硬件是否支持二次开发(一般都支持).如果支持我们需要和他们拿到他们底层的jar包和api(接口文档),要是有demo就更好 ...
- 基于华视身份证读卡器读取身份证信息的Android demo
项目概述 本Demo需要华视的身份证读卡器,连接Android机器设备,当身份证读卡器读取到身份证信息后,立马展示出身份证信息数据.得到身份证的姓名.照片.出生年月等数据. 项目概述 本Demo需要华 ...
- 浏览器使用华视电子设备读取身份证信息
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家. 对人工智能感兴趣或者想了解的小伙伴,可以点击跳转到网站一起学习哟. https://www.captainai.ne ...
- VUE实现华视身份证阅读器读取身份证信息
VUE实现华视身份证阅读器读取身份证信息 话不多上直接上代码,写的不怎么规范多多包涵,我是在模态框实现的,在这里就只提供模态框代码. 最后附上华视身份证阅读器安装文件和浏览器插件链接: [https: ...
- VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)
本文是用了vue+element来实现华视身份证读卡器读取身份信息的,当然在开发之前要做好前提准备,就是厂家提供对应设备的api和安装对应的驱动.本文通过两种方法来实现读取信息,第一种是点击按钮读取信 ...
- 基于Android NFC传感器读取身份证信息demo
摘要:通过导入开发包sdk开发基几Android NFC设备读取身份证信息 1. 开发条件: 1)鱼住往来科技的身份验证sdk :下载地址:https://www.yzfuture.cn/views/ ...
- android通过USB读取身份证信息
一.USB的通信流程 搜索设备->建立连接->通信 , 全部代码请 "戳这" 1.搜索设备 /*** 获取目标UsbDevice* @param view*/publi ...
最新文章
- 最长回文子序列(LPS)
- 全面解读java虚拟机
- VLC详细的使用说明以及配置说明综合示范实例精通VLC开发
- java jdbc is一个会话_java_JdbcUtilis_单实例
- java 重启tomcat_linux下重启tomcat的命令
- 首秀双折叠屏手机却被友商炮轰 小米回应:悍然碰瓷!
- Python版组合数计算方法优化思路和源码
- springboot上传文件过大,全局异常捕获,客户端没有返回值
- bom csv java_Java系列化与反系列化
- 用WIN PE通过修改系统注册表修复因盘符错乱而导致系统无法启动问题
- 服务器虚拟化对硬件有要求,虚拟主机对硬件有要求吗
- java jdbc 批处理_JDBC的批处理操作
- [BZOJ1597]土地购买
- Spring Cache key生成策略, 不要想当然认为是全类名+方法+参数
- 输入年月日实现计算这是一年的第几天
- SkyEye硬件模拟平台
- 易天光模块交期漫画故事
- python爬取微博数据词云_爬虫篇:使用Python动态爬取某大V微博,再用词云分析...
- nodejs安装、解决下载速度慢、idea中用node引入vue
- mysql查询未使用索引,监控MySQL中未使用的索引
热门文章
- 利用淘宝云盘作为图床
- Dijkstra(迪杰特斯拉)算法(极简版)
- CyberLink PowerDVD 9 简体中文版+注册码下载
- 上班摸鱼神器:盯盘小工具 实时监视股票行情走势 电脑PC端
- ASP.NET中table控件去掉 td 之前的间隔
- HP EVA系列存储raid结构原理研究
- 普通下载url与迅雷快车旋风下载地址转换原理分析
- 解决MYSQL导入(Excel等)或者插入中文失败
- 更新conda出现:PackageNotInstalledError: Package is not installed in prefix. 的解决
- 美国医院管理职业化之路