二代身份证阅读器(XZX)
问题一
解决方法:
通常我把所有的dll复制到system32文件夹,64位系统复制到sysWOW64文件夹,而且编译选项CPU要选择X86
问题二
解决方法:
图片路径默认是C:\,对C:\没有写的权限,所以提示此错误。改变此路径到别的盘符就可以解决。
以下是我编写的代码
![](/assets/blank.gif)
![](/assets/blank.gif)
1 public class IDCardHelper 2 { 3 #region 数据类型和导入接口 4 5 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)] 6 public struct IDCardData 7 { 8 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] 9 public string Name; //姓名 10 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)] 11 public string Sex; //性别 12 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] 13 public string Nation; //名族 14 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] 15 public string Born; //出生日期 16 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 72)] 17 public string Address; //住址 18 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] 19 public string IDCardNo; //身份证号 20 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] 21 public string GrantDept; //发证机关 22 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] 23 public string UserLifeBegin; // 有效开始日期 24 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 18)] 25 public string UserLifeEnd; // 有效截止日期 26 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 38)] 27 public string reserved; // 保留 28 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 255)] 29 public string PhotoFileName; // 照片路径 30 } 31 /************************端口类API *************************/ 32 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetCOMBaud", CharSet = CharSet.Ansi)] 33 public static extern int Syn_GetCOMBaud(int iPort, ref uint puiBaudRate); 34 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetCOMBaud", CharSet = CharSet.Ansi)] 35 public static extern int Syn_SetCOMBaud(int iPort, uint uiCurrBaud, uint uiSetBaud); 36 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_OpenPort", CharSet = CharSet.Ansi)] 37 public static extern int Syn_OpenPort(int iPort); 38 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ClosePort", CharSet = CharSet.Ansi)] 39 public static extern int Syn_ClosePort(int iPort); 40 /**************************SAM类函数 **************************/ 41 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetMaxRFByte", CharSet = CharSet.Ansi)] 42 public static extern int Syn_SetMaxRFByte(int iPort, byte ucByte, int iIfOpen); 43 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ResetSAM", CharSet = CharSet.Ansi)] 44 public static extern int Syn_ResetSAM(int iPort, int iIfOpen); 45 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMStatus", CharSet = CharSet.Ansi)] 46 public static extern int Syn_GetSAMStatus(int iPort, int iIfOpen); 47 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMID", CharSet = CharSet.Ansi)] 48 public static extern int Syn_GetSAMID(int iPort, ref byte pucSAMID, int iIfOpen); 49 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetSAMIDToStr", CharSet = CharSet.Ansi)] 50 public static extern int Syn_GetSAMIDToStr(int iPort, ref byte pcSAMID, int iIfOpen); 51 /*************************身份证卡类函数 ***************************/ 52 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_StartFindIDCard", CharSet = CharSet.Ansi)] 53 public static extern int Syn_StartFindIDCard(int iPort, ref byte pucIIN, int iIfOpen); 54 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SelectIDCard", CharSet = CharSet.Ansi)] 55 public static extern int Syn_SelectIDCard(int iPort, ref byte pucSN, int iIfOpen); 56 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseMsg", CharSet = CharSet.Ansi)] 57 public static extern int Syn_ReadBaseMsg(int iPort, ref byte pucCHMsg, ref uint puiCHMsgLen, ref byte pucPHMsg, ref uint puiPHMsgLen, int iIfOpen); 58 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseMsgToFile", CharSet = CharSet.Ansi)] 59 public static extern int Syn_ReadBaseMsgToFile(int iPort, ref byte pcCHMsgFileName, ref uint puiCHMsgFileLen, ref byte pcPHMsgFileName, ref uint puiPHMsgFileLen, int iIfOpen); 60 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseFPMsg", CharSet = CharSet.Ansi)] 61 public static extern int Syn_ReadBaseFPMsg(int iPort, ref byte pucCHMsg, ref uint puiCHMsgLen, ref byte pucPHMsg, ref uint puiPHMsgLen, ref byte pucFPMsg, ref uint puiFPMsgLen, int iIfOpen); 62 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadBaseFPMsgToFile", CharSet = CharSet.Ansi)] 63 public static extern int Syn_ReadBaseFPMsgToFile(int iPort, ref byte pcCHMsgFileName, ref uint puiCHMsgFileLen, ref byte pcPHMsgFileName, ref uint puiPHMsgFileLen, ref byte pcFPMsgFileName, ref uint puiFPMsgFileLen, int iIfOpen); 64 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadNewAppMsg", CharSet = CharSet.Ansi)] 65 public static extern int Syn_ReadNewAppMsg(int iPort, ref byte pucAppMsg, ref uint puiAppMsgLen, int iIfOpen); 66 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_GetBmp", CharSet = CharSet.Ansi)] 67 public static extern int Syn_GetBmp(int iPort, ref byte Wlt_File); 68 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadMsg", CharSet = CharSet.Ansi)] 69 public static extern int Syn_ReadMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData); 70 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_ReadFPMsg", CharSet = CharSet.Ansi)] 71 public static extern int Syn_ReadFPMsg(int iPortID, int iIfOpen, ref IDCardData pIDCardData, ref byte cFPhotoname); 72 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_FindReader", CharSet = CharSet.Ansi)] 73 public static extern int Syn_FindReader(); 74 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_FindUSBReader", CharSet = CharSet.Ansi)] 75 public static extern int Syn_FindUSBReader(); 76 /***********************设置附加功能函数 ************************/ 77 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoPath", CharSet = CharSet.Ansi)] 78 public static extern int Syn_SetPhotoPath(int iOption, ref byte cPhotoPath); 79 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoType", CharSet = CharSet.Ansi)] 80 public static extern int Syn_SetPhotoType(int iType); 81 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetPhotoName", CharSet = CharSet.Ansi)] 82 public static extern int Syn_SetPhotoName(int iType); 83 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetSexType", CharSet = CharSet.Ansi)] 84 public static extern int Syn_SetSexType(int iType); 85 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetNationType", CharSet = CharSet.Ansi)] 86 public static extern int Syn_SetNationType(int iType); 87 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetBornType", CharSet = CharSet.Ansi)] 88 public static extern int Syn_SetBornType(int iType); 89 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetUserLifeBType", CharSet = CharSet.Ansi)] 90 public static extern int Syn_SetUserLifeBType(int iType); 91 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_SetUserLifeEType", CharSet = CharSet.Ansi)] 92 public static extern int Syn_SetUserLifeEType(int iType, int iOption); 93 /***********************M1卡操作函数 (A16D-HF) ********************/ 94 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_USBHIDM1Reset", CharSet = CharSet.Ansi)] 95 public static extern int Syn_USBHIDM1Reset(int iPort, ref uint pdwCardSN, ref byte pbSize); 96 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_USBHIDM1AuthenKey", CharSet = CharSet.Ansi)] 97 public static extern int Syn_USBHIDM1AuthenKey(int iPort, byte KeyType, byte BlockNo, ref byte pKey); 98 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_USBHIDM1ReadBlock", CharSet = CharSet.Ansi)] 99 public static extern int Syn_USBHIDM1ReadBlock(int iPort, byte BlockNo, ref byte pBlock); 100 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_USBHIDM1WriteBlock", CharSet = CharSet.Ansi)] 101 public static extern int Syn_USBHIDM1WriteBlock(int iPort, byte BlockNo, ref byte pBlock); 102 [DllImport("SynIDCardAPI.dll", EntryPoint = "Syn_USBHIDM1Halt", CharSet = CharSet.Ansi)] 103 public static extern int Syn_USBHIDM1Halt(int iPort); 104 105 #endregion 106 107 static int nPort = 0;//端口 108 109 /// <summary> 110 /// 获取身份证信息 111 /// </summary> 112 /// <param name="CardMsg"></param> 113 /// <param name="errStr"></param> 114 /// <returns></returns> 115 public static bool ReadMsg(out IDCardData CardMsg, out string errStr) 116 { 117 CardMsg = new IDCardData(); 118 errStr = ""; 119 int nRet, iPhotoType; 120 string stmp; 121 byte[] cPath = new byte[255]; 122 byte[] pucIIN = new byte[4]; 123 byte[] pucSN = new byte[8]; 124 125 #region 获取读卡器 126 if (nPort == 0) 127 { 128 if (!FindDrivers(out errStr, out nPort)) 129 { 130 if (string.IsNullOrEmpty(errStr)) 131 errStr = "没有找到读卡器"; 132 return false; 133 } 134 } 135 #endregion 136 137 stmp = "D:\\"; 138 cPath = System.Text.Encoding.Default.GetBytes(stmp); 139 140 Syn_SetPhotoPath(2, ref cPath[0]); //设置照片路径 iOption 路径选项 0=C: 1=当前路径 2=指定路径 141 //cPhotoPath 绝对路径,仅在iOption=2时有效 142 iPhotoType = 0; 143 Syn_SetPhotoType(0); //0 = bmp ,1 = jpg , 2 = base64 , 3 = WLT ,4 = 不生成 144 Syn_SetPhotoName(2); // 生成照片文件名 0=tmp 1=姓名 2=身份证号 3=姓名_身份证号 145 146 Syn_SetSexType(1); // 0=卡中存储的数据 1=解释之后的数据,男、女、未知 147 Syn_SetNationType(1);// 0=卡中存储的数据 1=解释之后的数据 2=解释之后加"族" 148 Syn_SetBornType(3); // 0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD 149 Syn_SetUserLifeBType(1); // 0=YYYYMMDD,1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD 150 Syn_SetUserLifeEType(1, 1); // 0=YYYYMMDD(不转换),1=YYYY年MM月DD日,2=YYYY.MM.DD,3=YYYY-MM-DD,4=YYYY/MM/DD, 151 // 0=长期 不转换, 1=长期转换为 有效期开始+50年 152 if (Syn_OpenPort(nPort) == 0) 153 { 154 if (Syn_SetMaxRFByte(nPort, 80, 0) == 0) 155 { 156 nRet = Syn_StartFindIDCard(nPort, ref pucIIN[0], 0); 157 nRet = Syn_SelectIDCard(nPort, ref pucSN[0], 0); 158 nRet = Syn_ReadMsg(nPort, 0, ref CardMsg); 159 if (nRet == 0) 160 { 161 return true; 162 } 163 else 164 { 165 errStr = " A 读取身份证信息错误"; 166 return false; 167 } 168 } 169 } 170 else 171 { 172 errStr = " A 打开端口失败"; 173 return false; 174 } 175 Syn_ClosePort(nPort); 176 return true; 177 } 178 179 /// <summary> 180 /// 获取读卡器 181 /// </summary> 182 /// <param name="error"></param> 183 /// <param name="nPort"></param> 184 /// <returns></returns> 185 public static bool FindDrivers(out string error, out int nPort) 186 { 187 int i = 0; 188 error = ""; 189 nPort = 0; 190 try 191 { 192 i = Syn_FindReader(); 193 } 194 catch (Exception e) 195 { 196 error = e.ToString(); 197 return false; 198 } 199 if (i > 0) 200 { 201 nPort = i; 202 } 203 else 204 { 205 nPort = 0; 206 return false; 207 } 208 return true; 209 } 210 }
View Code
本人用ASP.NET开发的,图片会保存到本地,需要上传到服务器端才能在网页中查看,以下是上传图片的方法
![](/assets/blank.gif)
![](/assets/blank.gif)
1 public bool UploadPhoto(string photoPath) 2 { 3 FileStream stream = new FileStream(photoPath, FileMode.Open, FileAccess.Read); 4 int size = Convert.ToInt32(stream.Length); 5 Byte[] MeaningFile = new Byte[size]; 6 stream.Read(MeaningFile, 0, size); 7 stream.Close(); 8 FileStream photoStream = null; 9 10 string fileName = photoPath.Substring(photoPath.LastIndexOf("\\") + 1); 11 string fileExt = photoPath.Substring(photoPath.LastIndexOf(".") + 1); 12 if (fileExt.ToLower() == "bmp")//必须是bmp文件 13 { 14 try 15 { 16 string filePath = Server.MapPath("~/IDCardPhoto/"); 17 if (!Directory.Exists(filePath)) 18 { 19 Directory.CreateDirectory(filePath); 20 } 21 if (File.Exists(Server.MapPath("~/IDCardPhoto/" + fileName)) == true) //如果存在文件 22 { 23 24 } 25 else 26 { 27 //fileName = "newFileName" + fileExt; 28 photoStream = new FileStream(filePath + fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); 29 photoStream.Write(MeaningFile, 0, MeaningFile.Length); 30 photoStream.Close(); 31 } 32 } 33 catch 34 { 35 return false; 36 } 37 finally 38 { 39 if (photoStream != null) 40 { 41 try 42 { 43 photoStream.Close(); 44 } 45 catch 46 { 47 } 48 } 49 } 50 } 51 else 52 { 53 54 } 55 return true; 56 }
View Code
转载于:https://www.cnblogs.com/BrokenIce/p/5977889.html
二代身份证阅读器(XZX)相关推荐
- 神思二代身份证阅读器集成WEB实例文档js及说明
神思二代身份证阅读器使用说明 --By wuhebin 20180705 1. 硬件说明:神思SS628(100)台式二代身份证阅读器 2. 神思阅读器仅支持IE浏览器或者兼容IE浏览 ...
- 分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发
人工智能的兴起,最近这段时间碰到很多开发工程师咨询Python语言二次开发使用身份证阅读器的问题,这次特增加了Python语言的demo,供大家参考使用. 先上Python界面的读取效果图: 1.说明 ...
- 二代身份证阅读器 C#、JAVA调用教程
型号:普天CPIDMR02/TG身份证阅读器 SDK版本:2020 (我这不提供下载,自己咨询卖家,或者网上自己找,SDK 厂家不二次封装的机器理论通用) 新老版本区别: 多了外国人永久居留身份证.港 ...
- delphi 二代身份证阅读器开发 SDT_ReadBaseMsg函数
C++中函数原型: STDAPI_API int WINAPI SDT_ReadBaseMsg( int iPort, unsigned char * pucCHMsg, unsigned int * ...
- delphi 二代身份证阅读器 SDT_ReadBaseMsg()读取到的照片数据进行处理问题
SDT_ReadBaseMsg(1001,@pucCHMsg,puiCHMsgLen,@pucPHMsg,puiPHMsgLen,1);//获取读卡数据 pucCHMsg 文字信息(unicode编 ...
- C#如何读取身份证阅读器
不同的身份证读卡器,其动态库不一样,新中新二代身份证阅读器,型号:DKQ-A16D,eg: using System; using System.Collections.Generic; using ...
- 二代身份证读取 中控ID180 二三代身份证阅读器 Vue版本
二代身份证读取 中控ID180 二三代身份证阅读器 Vue版本 设备 设备名称:台式身份证阅读机 产品型号:ID180 设备驱动和文档 链接:https://pan.baidu.com/s/1nAYk ...
- IE浏览器使用js调用阅读插件调用二代证阅读器读取身份证信息
IE浏览器身份证阅读插件,使用js调用阅读插件调用二代证阅读器读取身份证信息(支持中盾身份证阅读设备,如需支持其它设备可与我联系QQ:19937243:E-Mail:nxiaoping@163.com ...
- IE下使用js调用阅读插件调用二代证阅读器读取身份证信息
插件下载地址 http://download.csdn.net/detail/nxiaoping/5974003 js代码 var sRead=new ActiveXObject("TSFZ ...
最新文章
- 写文章比较正规的格式
- 随机组卷python_关于随机自动组卷的算法,二维数组
- [转]C#多线程学习(三) 生产者和消费者
- 教科书上的LDA为什么长这样?
- opencv学习笔记18:canny算子边缘检测原理及其函数使用
- 十二之续、快速排序算法的深入分析
- 201521123115 《Java程序设计》第3周学习总结
- 针对IE安全控件的爬虫
- MintUI(详见官方文档)
- 北大方正集团名列2018年中国电子信息百强第8位
- iPad Java编辑器_学会这五款软件 让iPad Pro在你手里变得更强大
- iMac 2019一体机开箱体验,其内存是什么牌子,怎样换iMac内存?
- 宁波大学计算机非全,宁波大学考研:全日制和非全日制的6大区别,很多人不知道...
- Excel里面输入18位数字,但是显示却是其他的?!请问怎么解决?
- 淘淘商城---8.7
- 高精度加法竖式模拟器
- vue中$emit跟$on,$off跟用法
- JS 倒计时(一天的倒计时)
- git从gitHub下载代码
- 统计软件与数据分析--Lesson3
热门文章
- PHP得到汉字的拼音字母
- 中科声龙荣获第七届中国行业影响力品牌峰会“品牌榜入围企业”
- 一对一直播源码服务器怎么样防范恶意爬取信息
- fcrp-d和fcrp
- 简直了!10年难得一见的Tuxedo服务异常
- 使用Prawn制作《老友记》Friends对白PDF(附:老友记对白下载)
- android 控件页脚,在布局末尾的android中设置页脚
- 公益联动|将爱传递 爱心义卖助力乡村孩子实现阅读梦
- 10-Mar-2021 17:31日期怎么转换
- 利用计算机窃听,神奇 | 以色列研究人员实现利用计算机风扇噪音窃听