LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 调用动态链接库读取二代身份证信息

admin
2024年10月13日 22:14 本文热度 406

概述

一般来说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        /************************端口类API *************************/        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetMaxRFByte", CharSet = CharSet.Ansi)]        public static extern int Syn_SetMaxRFByte(int iPort, byte ucByte, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetCOMBaud", CharSet = CharSet.Ansi)]        public static extern int Syn_GetCOMBaud(int iPort, ref uint puiBaudRate);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetCOMBaud", CharSet = CharSet.Ansi)]        public static extern int Syn_SetCOMBaud(int iPort, uint uiCurrBaud, uint uiSetBaud);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_OpenPort", CharSet = CharSet.Ansi)]        public static extern int Syn_OpenPort(int iPort);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ClosePort", CharSet = CharSet.Ansi)]        public static extern int Syn_ClosePort(int iPort);        /**************************SAM类函数 **************************/        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ResetSAM", CharSet = CharSet.Ansi)]        public static extern int Syn_ResetSAM(int iPort, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMStatus", CharSet = CharSet.Ansi)]        public static extern int Syn_GetSAMStatus(int iPort, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMID", CharSet = CharSet.Ansi)]        public static extern int Syn_GetSAMID(int iPort, ref byte pucSAMID, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMIDToStr", CharSet = CharSet.Ansi)]        public static extern int Syn_GetSAMIDToStr(int iPort, ref byte pcSAMID, int iIfOpen);        /*************************身份证卡类函数 ***************************/        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_StartFindIDCard", CharSet = CharSet.Ansi)]        public static extern int Syn_StartFindIDCard(int iPort, ref byte pucIIN, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SelectIDCard", CharSet = CharSet.Ansi)]        public static extern int Syn_SelectIDCard(int iPort, ref byte pucSN, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseMsg", CharSet = CharSet.Ansi)]        public static extern int Syn_ReadBaseMsg(int iPort, ref byte pucCHMsg, ref uint puiCHMsgLen, ref byte pucPHMsg, ref uint puiPHMsgLen, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadIINSNDN", CharSet = CharSet.Ansi)]        public static extern int Syn_ReadIINSNDN(int iPort, ref byte pucIINSNDN, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseMsgToFile", CharSet = CharSet.Ansi)]        public static extern int Syn_ReadBaseMsgToFile(int iPort, ref byte pcCHMsgFileName, ref uint puiCHMsgFileLen, ref byte pcPHMsgFileName, ref uint puiPHMsgFileLen, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadIINSNDNToASCII", CharSet = CharSet.Ansi)]        public static extern int Syn_ReadIINSNDNToASCII(int iPort, ref byte pucIINSNDN, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadNewAppMsg", CharSet = CharSet.Ansi)]        public static extern int Syn_ReadNewAppMsg(int iPort, ref byte pucAppMsg, ref uint puiAppMsgLen, int iIfOpen);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetBmp", CharSet = CharSet.Ansi)]        public static extern int Syn_GetBmp(int iPort, ref byte Wlt_File);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadMsg", CharSet = CharSet.Ansi)]        public static extern int Syn_ReadMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_FindReader", CharSet = CharSet.Ansi)]        public static extern int Syn_FindReader();        /***********************设置附加功能函数 ************************/        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoPath", CharSet = CharSet.Ansi)]        public static extern int Syn_SetPhotoPath(int iOption, ref byte cPhotoPath);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoType", CharSet = CharSet.Ansi)]        public static extern int Syn_SetPhotoType(int iType);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoName", CharSet = CharSet.Ansi)]        public static extern int Syn_SetPhotoName(int iType);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetSexType", CharSet = CharSet.Ansi)]        public static extern int Syn_SetSexType(int iType);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetNationType", CharSet = CharSet.Ansi)]        public static extern int Syn_SetNationType(int iType);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetBornType", CharSet = CharSet.Ansi)]        public static extern int Syn_SetBornType(int iType);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetUserLifeBType", CharSet = CharSet.Ansi)]        public static extern int Syn_SetUserLifeBType(int iType);        [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetUserLifeEType", CharSet = CharSet.Ansi)]        public static extern int Syn_SetUserLifeEType(int iType, int iOption);
       #endregion    }

3、读取显示相关的信息

  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;


该文章在 2024/10/14 12:27:42 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved