当前位置: 首页 > 科技观察

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

时间:2023-03-19 21:28:34 科技观察

C#调用动态链接库读取二代身份证信息转载请联系后台Q公众号。概述一般来说,winform应用解决这个问题是很容易的,但是web应用就稍微麻烦一点。您必须拥有在线居民身份证阅读器。实现方法1.创建一个winform控件工程ReadCardControl,添加一个主类ReadIDCardprivateboolReadIDCard(){try{BLL.API.SynIDCardAPI.IDCardDataCardMsg=newBLL.API.SynIDCardAPI.IDCardData();intnRet,nPort;byte[]pucIIN=newbyte[4];byte[]pucSN=newbyte[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,refpucIIN[0],0);nRet=BLL.API.SynIDCardAPI.Syn_SelectIDCard(nPort,refpucSN[0],0);nRet=BLL.API.SynIDCardAPI.Syn_ReadMsg(nPort,0,refCardMsg);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="读卡成功";returntrue;}else{lblMsg.Text="请放卡:读取身份证信息出错";returnfalse;}}}else{lblMsg.Text="打开端口失败";returnfalse;}returntrue;}catch(Exceptionex){Xw.Common.Helper.LogHelper.WriteErrorToLog(ex.Message);returnfalse;}}2.声明DllImport,调用动态链接库publicclassSynIDCardAPI{#regionIDCardData[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)]publicstructIDCardData{[MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]//结构体中使用的字符串,[]类似有限描述说明当这个公共结构体转为非托管代码时,封装定义publicstringName;//名称[MarshalAs(UnmanagedType.ByValTStr,SizeConst=6)]publicstringSex;//性别[MarshalAs(UnmanagedType.ByValTStr,SizeConst=20)]publicstringNation;//姓名家族[MarshalAs(UnmanagedType.ByValTStr,SizeConst=18)]publicstringBorn;//出生日期[MarshalAs(UnmanagedType.ByValTStr,SizeConst=72)]publicstringAddress;//地址[MarshalAs(UnmanagedType.ByValTStr,SizeConst=38)]publicstringIDCardNo;//身份证号码[MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]publicstringGrantDept;//发证机关[MarshalAs(UnmanagedType.ByValTStr,SizeConst=18)]publicstringUserLifeBegin;//有效开始日期[MarshalAs(UnmanagedType.ByValTStr,SizeConst=18)]publicstringUserLifeEnd;//有效结束日期[MarshalAs(UnmanagedType.ByValTStr,SizeConst=38)]publicstringreserved;//保留[MarshalAs(UnmanagedType.ByValTStr,SizeConst=255)]publicstringPhotoFileName;//照片路径}#endregion#regionSynIDCardAPI/**************************************************************************************************/[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetMaxRFByte",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetMaxRFByte(intiPort,byteucByte,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_GetCOMBaud",CharSet=CharSet.Ansi)]publicstaticexternintSyn_GetCOMBaud(intiPort,refuintpuiBaudRate);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetCOMBaud",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetCOMBaud(intiPort,uintuiCurrBaud),uintuiSetBaud);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_OpenPort",CharSet=CharSet.Ansi)]publicstaticexternintSyn_OpenPort(intiPort);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_ClosePort",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ClosePort(intiPort);/**************************SAM类函数***************************/[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_ResetSAM",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ResetSAM(intiPort,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_GetSAMStatus",CharSet=CharSet.Ansi)]publicstaticexternintSyn_GetSAMStatus(intiPort,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_GetSAMID",CharSet=CharSet.Ansi)]publicstaticexternintSyn_GetSAMID(intiPort,refbytepucSAMID,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_GetSAMIDToStr",CharSet=CharSet.Ansi)]publicstaticexternintSyn_GetSAMIDToStr(intiPort,refbytepcSAMID,intiIfOpen);/*************************身份证卡数量***************************/[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_StartFindIDCard",CharSet=CharSet.Ansi)]publicstaticexternintSyn_StartFindIDCard(intiPort,refbytepucIIN,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SelectIDCard",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SelectIDCard(intiPort,refbytepucSN,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_ReadBaseMsg",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ReadBaseMsg(intiPort,refbytepucCHMsg,refuintpuiCHMsgPHM,refgbyteprefuintpuiPHMsgLen,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_ReadIINSDNDN",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ReadIINSNDN(intiPort,refbytepucIINSNDN,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_ReadBaseMsgToFile",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ReadBaseMsgToFile(intiPort,refbytepcCHMsgFileName,refuintpuiCHMsgFileLen,refbytepcPHMsgFileName,refuintpuiPHMsgFileLen,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_ReadIINSNDNToASCII",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ReadIINSNDNToASCII(intiPort,refbytepucIINSNDN,intiIfOpen);[DllIDCard("SynIDCardAPI.dll","DllIDCard("DllIDImport()="Syn_ReadNewAppMsg",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ReadNewAppMsg(intiPort,refbytepucAppMsg,refuintpuiAppMsgLen,intiIfOpen);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_GetBmp",CharSet=CharSet.Ansi)]publicstaticexternintSyn_GetBmp(intiPort,);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_ReadMsg",CharSet=CharSet.Ansi)]publicstaticexternintSyn_ReadMsg(intiPortID,intiIfOpen,refIDCardDatapIDCardData);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_FindReader",CharSet=CharSet.Ansi)]publicstaticexternintSyn_FindReader();/************************设置附加功能能数************************/[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetPhotoPath",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetPhotoPath(intiOption,refbytecPhotoPath);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetPhotoType",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetPhotoType(intiType);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetPhotoName",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetPhotoName(intiType);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetSexType",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetSexType(intiType);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetNationType",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetNationType(intiType);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetBornType",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetBornType(intiType);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetUserLifeBType",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetUserLifeBType(intiType);[DllImport("SynIDCardAPI.dll",EntryPoint="Syn_SetUserLifeEType",CharSet=CharSet.Ansi)]publicstaticexternintSyn_SetUserLifeEType(intiType,intiOption);#endregion}3.读取并显示相关信息.Name;txtNation.Text=Xw.Common.Helper.NationHelper.GetNationByNO(CardMsg.Nation);txtSex.Text=CardMsg.Sex=="1"?""男":"女";picMan.Image=图片。FromFile(CardMsg.PhotoFileName);//lblMsg.Text="读卡成功";returntrue;