前言,最近学习调用 医保卡业务,使用德卡读卡器,主要就是调用一个DLL,动态库文件. 借着自学的机会把心得体会都记录下来,方便感兴趣的小伙伴学习与讨论。 内容均系原创,欢迎大家转载分享,但转载的同时别忘了注明作者和原文链接哦。本文内容和图片如果有侵犯您的权利,请联系yisheng163@qq.com。
一,准备工作:
先到德卡官网下载相关资料,下载动态库。
http://www.decard.com/download/downloadcategoryid=10&isMode=false.html
下载 SSCardDriver.dll 动态库。
读卡器准备:找到一台德卡Z9读卡器用来测试,Z9与Z90基本通用,不影响测试。
先拆开底座,把授权蕊片装入卡槽二。
USB插头,插入电脑USB口,任意插USB,不需要记住USB端口号,下一步读卡也不需要设置USB端口号。
二,C#读卡类
/// <summary> /// 德卡读卡器专用类 /// mail:yisheng163@qq.com /// </summary> public class SSCard { /// <summary> /// 德卡读卡器专用读卡方法,需要将SSCardDriver.dll放在程序同一目录下 /// </summary> /// <param name="iType">卡的类型,定义如下:1-接触式操作卡;2-非接触式操作卡;3-自动寻卡,接触式操作卡优先;4-自动寻卡,非接触式操作卡优先。</param> /// <param name="outInfo">该输出参数为读出的社保卡基本信息各数据项,依次为:发卡地区行政区划代码(卡识别码前6位)、社会保障号码、卡号、卡识别码、姓名、卡复位信息(仅取历史字节)、规范版本、发卡日期、卡有效期、终端机编号、终端设备号。各数据项之间以“|”分割,且最后一个数据项以“|”结尾。</param> /// <returns></returns> [DllImport("SSCardDriver.dll", EntryPoint = "iReadCardBas")] public static extern int iReadCardBas(int iType, StringBuilder outInfo); /// <summary> /// 读取社会保障号和姓名 /// </summary> /// <returns></returns> public static string GetIDCode(ref bool CodeState, ref string ErrDesc, ref string IName, ref string ICard) { string ReStr=""; StringBuilder myStrB=new StringBuilder(256); iReadCardBas(1, myStrB); if (myStrB != null && myStrB.ToString() != "" && myStrB.ToString().IndexOf("|") >= 0) { //读取成功 string[] myStringList = myStrB.ToString().Split('|'); if (myStringList != null && myStringList.Length > 0) { ICard = myStringList[1]; IName = myStringList[4]; CodeState = true; ErrDesc = ""; } else { CodeState = false; ErrDesc = myStrB.ToString(); return ""; } } else { CodeState = false; ErrDesc = myStrB.ToString(); return ""; } return ReStr; } }
三,调用测试。
StringBuilder myStrB = new StringBuilder(2048); PT.BLL.DLL.SSCard.iReadCardBas(1, myStrB); if (myStrB != null && myStrB.ToString() != "" && myStrB.ToString().IndexOf("|") >= 0) { textBox1.Text = "\r\n" + myStrB.ToString(); }
读卡成功。
四,示例源码: