c# winform 身份证信息读取

article/2025/9/27 6:45:08

二代身份证信息读取源码分享

 

上软件运行界面:

温馨提示:运行程序别忘了装驱动哦!

 

上完整源码。界面可以自己画!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;
using System.IO;namespace PeopleCardInfoRed
{public partial class Form2 : Form{public Form2(){InitializeComponent();}private void Form2_Load(object sender, EventArgs e){//lblName.Text = DateTime.Now.Ticks.ToString();InitControl();InitThread();ReadCard();}int ReadFalseCount = 0;/// <summary>/// 读卡方法/// </summary>void ReadCard(){if (IsScanning){return;}Thread ThreadReadCard = new Thread(new ThreadStart(delegate{IsScanning = true;while (IsScanning){Thread.Sleep(500);int iPort = Project.DevicePort;if (Project.IsOpenedPort){IsReading = true;IntPtr tmp = Marshal.AllocCoTaskMem(4);int FindIDCard = API.SDT_StartFindIDCard(iPort, tmp, 0);if (FindIDCard == 0x9f){IntPtr tmp1 = Marshal.AllocCoTaskMem(8);int SelectIDCard = API.SDT_SelectIDCard(iPort, tmp1, 0);}IntPtr ptr_txt = Marshal.AllocCoTaskMem(256);IntPtr ptr_txtlen = Marshal.AllocCoTaskMem(4);IntPtr ptr_pic = Marshal.AllocCoTaskMem(1024);IntPtr ptr_piclen = Marshal.AllocCoTaskMem(4);if (API.SDT_ReadBaseMsg(iPort, ptr_txt, ptr_txtlen, ptr_pic, ptr_piclen, 0) == 0x90){ReadFalseCount = 0;int txtLen = Marshal.ReadInt32(ptr_txtlen);byte[] txt = new byte[txtLen];for (int i = 0; i < txtLen; i++){txt[i] = Marshal.ReadByte(ptr_txt, i);}//文本解析string Name = string.Empty;string Sex = string.Empty;string Mz = string.Empty;string Birthday = string.Empty;string Address = string.Empty;string IDNum = string.Empty;string Fzjg = string.Empty;string Yxq = string.Empty;string AppendMsg = string.Empty;string NewAddress = string.Empty;{Name = System.Text.Encoding.Unicode.GetString(txt, 0x00, 30).Trim();//姓名Sex = System.Text.Encoding.Unicode.GetString(txt, 0x1E, 2).Trim();//性别IDNum = System.Text.Encoding.Unicode.GetString(txt, 0x7A, 36).Trim();//身份证号IntPtr ptr_newappendmsg = Marshal.AllocCoTaskMem(70);IntPtr ptr_newappendmsglen = Marshal.AllocCoTaskMem(4);if (API.SDT_ReadNewAppMsg(iPort, ptr_newappendmsg, ptr_newappendmsglen, 0) == 0x90){int NewAppendMsgLen = Marshal.ReadInt32(ptr_newappendmsglen);byte[] NewAppendMsg = new byte[NewAppendMsgLen];for (int i = 0; i < NewAppendMsgLen; i++){NewAppendMsg[i] = Marshal.ReadByte(ptr_newappendmsg, i);}NewAddress = System.Text.Encoding.Unicode.GetString(NewAppendMsg);}if (FindIDCard != 0x9f){if (!lblIDCardNum.Text.Equals(string.Empty)){Thread.Sleep(500);continue;}}}Image img = null;//照片解析{int picLen = Marshal.ReadInt32(ptr_piclen);byte[] pic = new byte[picLen];for (int i = 0; i < picLen; i++){pic[i] = Marshal.ReadByte(ptr_pic, i);}string zpPath = Application.StartupPath + "\\" + IDNum;FileStream fs = new FileStream(zpPath + ".wlt", FileMode.Create);fs.Write(pic, 0, pic.Length);fs.Close();int zpResult = API.GetBmp(zpPath + ".wlt", 1);if (zpResult == 1){FileStream zpfs = new FileStream(zpPath + ".bmp", FileMode.Open);byte[] zp = new byte[zpfs.Length];zpfs.Read(zp, 0, (int)zpfs.Length);zpfs.Close();File.Delete(zpPath + ".bmp");MemoryStream ms = new MemoryStream(zp);ms.Write(zp, 0, zp.Length);img = Image.FromStream(ms);}}SetCardInfo(Name,Convert.ToInt32(Sex) == 1 ? "男" : "女",IDNum,img);}else{SetInfo("未读到卡");ReadFalseCount++;if (ReadFalseCount >= 10){ReadFalseCount = 0;API.SDT_ResetSAM(iPort, 0);API.SDT_ClosePort(iPort);Project.IsOpenedPort = false;IsReading = false;Thread.Sleep(500);}}IsReading = false;}else{SetInfo("未打开端口");//IsScanning = false;Thread.Sleep(500);continue;}}IsScanning = false;// Thread.Sleep(500);}));ThreadReadCard.IsBackground = true;ThreadReadCard.Name = "循环读卡进程";ThreadReadCard.Start();}void SetInfo(string sInfo){richTextBox1.Invoke(new EventHandler(delegate{richTextBox1.AppendText(sInfo);}));}void SetCardInfo(string Name,string Sex,string IDCardNumber,Image zp){lblName.Invoke(new EventHandler(delegate{lblName.Text = Name;}));lblIDCardNum.Invoke(new EventHandler(delegate{lblIDCardNum.Text = IDCardNumber;}));picPhoto.Invoke(new EventHandler(delegate{picPhoto.Image = zp;}));}void InitThread(){CheckPort();}bool IsReading = false;bool IsScanning = false;void CheckPort(){Thread CheckPortThread = new Thread(new ThreadStart(delegate{while (true){if (IsReading){Thread.Sleep(500);continue;}int OpenResult = 0x01;int i = 0;if (!Project.IsOpenedPort){for (i = 1001; i <= 1016; i++){try{API.SDT_ClosePort(i);}catch { }try { OpenResult = API.SDT_OpenPort(i); }catch { }if (OpenResult == 0x90){if (i != Project.DevicePort){Project.DevicePort = i;}break;}}}else{OpenResult = API.SDT_OpenPort(Project.DevicePort);}Console.WriteLine(Project.DevicePort);string tmpText = string.Empty;if (OpenResult == 0x90){Project.IsOpenedPort = true;tmpText = "USB端口 " + Project.DevicePort.ToString();}else{Project.IsOpenedPort = false;tmpText = "端口打开失败...";}lblPortState.Invoke(new EventHandler(delegate{lblPortState.Text = tmpText;}));if (Project.IsOpenedPort){Thread.Sleep(300);}else{Thread.Sleep(500);}Console.WriteLine("Port Scanning");}}));CheckPortThread.IsBackground = true;CheckPortThread.Name = "端口循环检测线程";CheckPortThread.Start();}/// <summary>/// 初始化控件/// </summary>void InitControl(){#region 初始化变量//Setting.Read();#endregion}private void button1_Click(object sender, EventArgs e){picPhoto.Image = null;lblIDCardNum.Text = "";lblName.Text = "";lblSex.Text = "";}}
}

 


http://chatgpt.dhexx.cn/article/wQRBG9kS.shtml

相关文章

二代身份证读取-微调版

说起微调其实就是对 上一篇文章 今天意外和身份证结缘 中提到的代码码放和调用一些巧妙的用法&#xff08;至少小鬼觉得很有意思很巧妙&#xff09;。 为什么有必要在写一篇 写的理由千千万&#xff1b;不写的理由万万千。对于小鬼来说就是&#xff1a;我吃饱了,撑着了&#x…

读取身份证信息系统的程序编写

文章目录 前言一、需要实现什么样的功能&#xff1f;二、编写过程 1.逻辑分析2.实操展示总结 前言 在网络诈骗的宣传过程中&#xff0c;常常提到不要去泄露自己的身份证号码&#xff0c;为什么呢&#xff1f;知己知彼&#xff0c;方能不被受骗&#xff0c;下面是对读取身份证信…

二代身份证读写器原理及开发

身份证读写器的作用就是从身份证中读取身份信息&#xff08;例如姓名、民族、身份证号等&#xff09;&#xff0c;然后显示或者传输给其他模块使用。功能框架如下&#xff1a; 功能框图说明&#xff1a; 1 业务模块。负责向安全模块发送命令&#xff0c;操作安全模块进行对应的…

身份证的验证和读取

身份证的验证和读取 开发工具与关键技术&#xff1a;Visual Studio 2015、C#.WPF 作者&#xff1a;周水生 撰写时间&#xff1a;2019年6月2日 首先我们说明一下身份证数字代表的意思&#xff1a; &#xff08;1&#xff09;前1、2位数字表示&#xff1a;所在省份的代码&#…

添加身份证读取窗口

实现功能&#xff1a;点击读取身份证会弹出身份证识别窗口&#xff0c;读取到数据后&#xff0c;回传用户选择是否替换原先数据。 效果演示 1.读取身份证的弹窗 src\components\idCard.vue <template><el-dialogtitle"读取身份证信息":close-on-click-mo…

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

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

【Python 身份证JSON数据读取】——身份证前六位地区码对照表文件(最全版-JSON文件)

点个赞留个关注吧&#xff01;&#xff01; 1、生成身份证前六位地区码对照表JSON文件 2、python 读取JSON文件 提取码【1234】 json文件下载 废话不多说&#xff0c;先上效果图 一、生成身份证json数据文件 先去百度搜索地区身份证号码前6位查询 ,然后进入网站控制台界面&…

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

本文是用了vueelement来实现华视身份证读卡器读取身份信息的&#xff0c;当然在开发之前要做好前提准备&#xff0c;就是厂家提供对应设备的api和安装对应的驱动。本文通过两种方法来实现读取信息&#xff0c;第一种是点击按钮读取信息&#xff0c;第二种是卡片放上去会自动读取…

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

身份证读取设备开发解决方案&#xff1a;2、Android下通过usb转串口读取身份证信息 文章目录 身份证读取设备开发解决方案&#xff1a;2、Android下通过usb转串口读取身份证信息1. 前言2. 准备3. android下读取身份证信息的demo3.1 部分源码3.2 碎片代码3.3 结果展示3.4 注意点…

自动化神器!Python 批量读取身份证信息写入 Excel

今天分享一个实用技能&#xff0c;利用 Python 批量读取身份证信息写入 Excel。 读取 以图片形式的身份证为例&#xff0c;信息读取我们使用百度文字识别OCR来实现&#xff0c;百度接口提供了免费额度&#xff0c;日常使用基本差不多够了&#xff0c;下面来具体看一下如何使用…

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

项目中用到了使用华视电子CVR-100U、CVR-100D设备读取身份证的设备在浏览器上读取身份证信息&#xff0c;在浏览器使用时&#xff0c;需要安装浏览器的运行的插件&#xff0c;否则设备不好用。 sdk下载方式在文章最后 此控件支持IE、360浏览器、360极速浏览器等浏览器 暂不支持…

身份证读取设备开发解决方案:3、单片机读取身份证信息的demo

身份证读取设备开发解决方案&#xff1a;3、单片机读取身份证信息的demo 文章目录 身份证读取设备开发解决方案&#xff1a;3、单片机读取身份证信息的demo一、前言二、部分代码及结果展示1. 准备2. 部分代码3. 结果展示 三、常见错误错误1错误2 四、注意事项1. 确认串口线焊接…

身份证阅读器读卡器React网页方法实现身份证的读取

支持产品型号东信EST-100GS谷歌版本身份证读卡器USB免驱接口&#xff0c;支持谷歌火狐360 IE 遨游 搜狗 等等多种web浏览器使用。 官方网址&#xff1a;www.eastcoms.com 以下为React源码示例&#xff1a; import React, {PureComponent} from react; import "./agreemen…

身份证读取

在找读取身份证动态库&#xff08;dll&#xff09; 文件时&#xff0c;发现这么一篇好文章&#xff0c;有兴趣学习一下&#xff01; ---------------- 这份代码&#xff0c;主要是根据api文档来写的&#xff0c;文档上提供了各个方法的使用说明&#xff0c;并且有一个示例代码。…

身份证读取设备开发解决方案:1、Windows下开发Qt程序demo读取身份证信息

身份证读取设备开发解决方案&#xff1a;1、Windows下开发Qt程序demo读取身份证信息 文章目录 身份证读取设备开发解决方案&#xff1a;1、Windows下开发Qt程序demo读取身份证信息1. 前言2. 身份证读取模块3. Qt5开发简单上位机读取身份证信息1. 注意的点2. 部分源码3. 结果展示…

最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能(详细)

最新web/java/jsp实现发送手机短信验证码和邮箱验证码的注册登录功能&#xff08;详细&#xff09; 最近几天有人需要帮忙做一个关于发送验证码的功能&#xff0c;之前没有做过&#xff0c;于是我鼓捣一阵子&#xff0c;记录一下关于web项目中注册登录常用的手机验证码和邮箱验…

uniapp中注册手机号短信验证码

一、效果图 二、输入手机号页面 <template><view><view classlogin-tel><view classtel-main><view classlogin-from><view classlogin-user><text classuser-text>手机号</text><input type"number" focustrue…

阿里云手机验证码注册(可以使用阿里云提供的测试模板,不用个人申请)

目录 打开阿里云&#xff1a;&#xff08;绑定手机号码&#xff09;&#xff0c;不用申请模板和签名手机验证码注册流程&#xff1a;实现流程创建springboot工程&#xff0c;添加依赖编写applicatioin配置文件编写controller&#xff0c;根据手机号发送短信编写service&#xf…

抖音实战~手机号验证码一键注册登录流程(限制手机终端登录)

文章目录 一、手机号验证码二、前端2.1. 点击登陆流程2.2. 点击登录源码 三、后端登录3.1. 登录流程图3.2. 流程简述3.3. 手机号验证码登录流程 一、手机号验证码 二、前端 2.1. 点击登陆流程 1.先校验手机号是否合法&#xff1f;不合法&#xff0c;则提示“请输入正确的手机…

会话——验证码注册与记住密码登录

文章目录 1、需求分析2、用户登录功能2.1、流程分析2.2、代码实现2.3、结果演示 3、登录记住密码功能3.1、流程分析3.2、代码实现3.3、结果演示 4、用户注册功能4.1、流程分析4.2、代码实现4.3、结果演示 5、注册验证码功能5.1、流程分析5.2、代码实现5.3、结果演示 1、需求分析…