C# 调用动态链接库读取二代身份证信息
发布时间:2025-11-05 08:48:43 作者:玩站小弟
我要评论
本文转载自微信公众号「后端Q」,作者conan。转载本文请联系后端Q公众号。概述一般来说winform应用程序解决这个问题起来时很容易的,web应用程序就麻烦一点了。你必要有联机型居民身份证阅读器一个。
本文转载自微信公众号「后端Q」,调读取代身作者conan。用动转载本文请联系后端Q公众号。态链
概述
一般来说winform应用程序解决这个问题起来时很容易的接库,免费信息发布网web应用程序就麻烦一点了。份证你必要有联机型居民身份证阅读器一个。信息
实现方式
1、调读取代身新建一个winform控件项目ReadCardControl,云服务器提供商用动添加一个主类ReadIDCard
private bool ReadIDCard() { try { BLL.API.SynIDCardAPI.IDCardData CardMsg = new BLL.API.SynIDCardAPI.IDCardData(); int nRet,态链 nPort; byte[] pucIIN = new byte[4]; byte[] pucSN = new byte[8]; nPort = Convert.ToInt32(1001); if (BLL.API.SynIDCardAPI.Syn_OpenPort(nPort) == 0) { if (BLL.API.SynIDCardAPI.Syn_SetMaxRFByte(nPort, 80, 0) == 0) { nRet = BLL.API.SynIDCardAPI.Syn_StartFindIDCard(nPort, ref pucIIN[0], 0); nRet = BLL.API.SynIDCardAPI.Syn_SelectIDCard(nPort, ref pucSN[0], 0); nRet = BLL.API.SynIDCardAPI.Syn_ReadMsg(nPort, 0, ref CardMsg); if (nRet == 0) { txtAddress.Text = CardMsg.Address; txtBirthday.Text = CardMsg.Born; txtCerticate.Text = CardMsg.IDCardNo; txtIssuingAuthoriy.Text = CardMsg.GrantDept; txtNames.Text = CardMsg.Name; txtNation.Text = Xw.Common.Helper.NationHelper.GetNationByNO(CardMsg.Nation); txtSex.Text = CardMsg.Sex == "1" ? "男" : "女"; picMan.Image = Image.FromFile(CardMsg.PhotoFileName); //lblMsg.Text = "读卡成功"; return true; } else { lblMsg.Text = "请放卡: 读取身份证信息错误"; return false; } } } else { lblMsg.Text = "打开端口失败"; return false; } return true; } catch (Exception ex) { Xw.Common.Helper.LogHelper.WriteErrorToLog(ex.Message); return false; } }2、声明DllImport,接库调用动态链接库
public class SynIDCardAPI { #region IDCardData [StructLayout(LayoutKind.Sequential,份证 CharSet = CharSet.Ansi, Pack = 1)] public struct IDCardData { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] //结构中使用的字串,香港云服务器[]类似限定说明 说明此公共结构传输到非托管代码时封装定义 public string Name; //姓名 [MarshalAs(UnmanagedType.ByValTStr,信息 SizeConst = 6)] public string Sex; //性别 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string Nation; //名族 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string Born; //出生日期 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)] public string Address; //住址 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] public string IDCardNo; //身份证号 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string GrantDept; //发证机关 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string UserLifeBegin; // 有效开始日期 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] public string UserLifeEnd; // 有效截止日期 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] public string reserved; // 保留 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] public string PhotoFileName; // 照片路径 } #endregion #region SynIDCardAPI /相关文章
如何自动生成Word文档目录的序号(简便有效的方法让你省时省力)
摘要:在撰写长篇文档时,我们常常需要添加目录以方便读者阅读。然而,手动为目录添加序号是一项繁琐而耗时的任务。本文将介绍一种简便有效的方法,帮助你轻松自动生成Word文档目录的序号,让你节...2025-11-05
OBS studio很酷,但 JavaScript 更酷,现在,我们用 JavaScript 创建自己的录屏功能。首先,创建一个HTML文件,包含记录按钮和一个播放标签,内容如下:<!DOCTY2025-11-05
数据库索引在平时的工作是必备的,怎么建好索引,怎么使用索引,可以提高数据的查询效率。而且在面试过程,数据库的索引也是必问的知识点,比如:索引底层结构选型,那为什么选择B+树?不同存储引擎的索引的体现形2025-11-05
项目中一直都有用到 Axios 作为网络请求工具,用它更要懂它,因此为了更好地发挥 Axios 在项目的价值,以及日后能够得心应手地使用它,笔者决定从源码层面好好欣赏一下它的美貌!Axios是一款基于2025-11-05手机连接电脑时发生未知错误的解决方法(解决手机连接电脑出现问题的简易步骤)
摘要:在现代社会中,手机已经成为人们生活中不可或缺的工具之一。而与此同时,将手机与电脑连接也成为了人们常见的需求之一。然而,有时我们可能会遇到一些意外情况,例如手机连接电脑时出现未知错误...2025-11-05
对经常玩域名抢注的朋友来说,域名抢注通道影响域名抢注成功率,通道不同价格不一,而且抢注成功率也有差别。那么,小白刚接触域名抢注,该怎么根据域名选通道呢?域名预定了还能改抢注通道吗?今天我们就来聊聊域名2025-11-05


最新评论