在学员录入的时候添加一个读取身份证填充对应信息的功能,但遇到如下问题: 开发对应的webapi注册win服务在用户的本地运行作为读取身份证信息的中转程序,前端调用对应的接口获取读取的信息。 程序生成的位数不对【试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)】
业务需求
解决方案
二次开发准备
链接1: 精伦身份证读卡器SDK二次开发包下载
链接2: 精伦读卡器BS网页SDK开发包
链接3: 驱动
链接1下载的二次开发包中SavePhoto.dll可能因为旧版本问题导致读取身份证时一直报错失败,因此需要使用到链接2中较新的SavePhoto.dll
链接: ASP.NET程序读取二代身份证(附源码)开发demo 编写调用二次开发dll
编写调用二次开发dll接口工具类ReadIdCardHelper(直接调用使用)
public class ReadIdCardHelper { #region DllImport [DllImport("idCardDll/sdtapi.dll")] private static extern int InitComm(int iPort);//初始化 [DllImport("idCardDll/sdtapi.dll")] private static extern int CloseComm();//关闭端口 [DllImport("idCardDll/sdtapi.dll")] private static extern int Authenticate();//卡认证 [DllImport("idCardDll/sdtapi.dll")]//读取数据,推荐使用 private static extern int ReadBaseInfos( StringBuilder Name, StringBuilder Gender, StringBuilder Folk, StringBuilder BirthDay, StringBuilder Code, StringBuilder Address, StringBuilder Agency, StringBuilder ExpireStart, StringBuilder ExpireEnd); [DllImport("idCardDll/sdtapi.dll")]//读取数据,推荐使用 private static extern int Routon_BeepLED(bool BeepON, bool LEDON, int duration); #endregion static public void readCard(ref IdCardMessageDto idCardMessage) { StringBuilder Name = new StringBuilder(31); // 姓名 StringBuilder Gender = new StringBuilder(3); // 性别 StringBuilder Folk = new StringBuilder(10); // 民族 StringBuilder BirthDay = new StringBuilder(9); // 生日 StringBuilder Code = new StringBuilder(19); // 证件号 StringBuilder Address = new StringBuilder(71); // 家庭地址 StringBuilder Agency = new StringBuilder(31); // 签发机关 StringBuilder ExpireStart = new StringBuilder(9); // 有效期起始日期 StringBuilder ExpireEnd = new StringBuilder(9); // 有效期截止日期 //打开端口 int intOpenRet = InitComm(1001); if (intOpenRet != 1) { Console.WriteLine("阅读机具未连接"); Routon_BeepLED(false,false,2000); return; } //卡认证 int intReadRet = Authenticate(); if (intReadRet != 1) { Console.WriteLine("卡认证失败"); Routon_BeepLED(false, false, 2000); CloseComm(); return; } //读卡 int intReadBaseInfosRet = ReadBaseInfos(Name, Gender, Folk, BirthDay, Code, Address, Agency, ExpireStart, ExpireEnd); if (intReadBaseInfosRet != 1) { Console.WriteLine("读卡失败"); Routon_BeepLED(false, false, 2000); CloseComm(); return; } idCardMessage = new IdCardMessageDto(); idCardMessage.Code = Code.ToString().Trim(); idCardMessage.Name = Name.ToString().Trim(); idCardMessage.Gender = Gender.ToString().Trim(); idCardMessage.Folk = Folk.ToString().Trim(); idCardMessage.BirthDay = BirthDay.ToString().Trim(); idCardMessage.Address = Address.ToString().Trim(); idCardMessage.Agency = Agency.ToString().Trim(); idCardMessage.ExpireStart = ExpireStart.ToString().Trim(); idCardMessage.ExpireEnd = ExpireEnd.ToString().Trim(); idCardMessage.photo = System.IO.Directory.GetCurrentDirectory() + "\photo.bmp"; Routon_BeepLED(true, true, 2000); CloseComm(); }
DLL文件必须位于程序当前目录或系统定义的查询路径中(即:系统环境变量中Path所设置的路径)
DLLImport会按照顺序去查找DLL文件(程序当前目录>System32目录>环境变量Path所设置路径)。
可能遇到的坑
二次开发包是在32位系统下面开发的,在64位系统上面开发编译的时候需要将生成的目标平台设为X86
demo下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算