C#开发-C# 调用动态链接库读取二代身份证信息
小职 2021-09-16 来源 :后端Q 阅读 1314 评论 0

摘要:本文主要介绍了C#开发-C# 调用动态链接库读取二代身份证信息,通过具体的内容向大家展现,希望对大家C#开发的学习有所帮助。

本文主要介绍了C#开发-C# 调用动态链接库读取二代身份证信息,通过具体的内容向大家展现,希望对大家C#开发的学习有所帮助。

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


9月17日19:30-20:30《高薪职场人必备技能》免费讲座   +QQ:2851229782


概述

一般来说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; 


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

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

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程