本文转载自微信公众号「后端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
 - /************************端口类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#调用动态链接库读取二代身份证信息
                
                当前地址:http://www.csdahua.cn/qtweb/news45/350695.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网