前言,最近学习调用 医保卡业务,使用德卡读卡器,主要就是调用一个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();
iReadCardBas(, myStrB);
if (myStrB != null && myStrB.ToString() != "" && myStrB.ToString().IndexOf("|") >= )
{
//读取成功
string[] myStringList = myStrB.ToString().Split('|');
if (myStringList != null && myStringList.Length > )
{
ICard = myStringList[];
IName = myStringList[];
CodeState = true;
ErrDesc = "";
}
else
{
CodeState = false;
ErrDesc = myStrB.ToString();
return "";
}
}
else
{
CodeState = false;
ErrDesc = myStrB.ToString();
return "";
} return ReStr;
} }

三,调用测试。

StringBuilder myStrB = new StringBuilder();
PT.BLL.DLL.SSCard.iReadCardBas(, myStrB);
if (myStrB != null && myStrB.ToString() != "" && myStrB.ToString().IndexOf("|") >= )
{
textBox1.Text = "\r\n" + myStrB.ToString();
}

读卡成功。

四,示例源码:

德卡Z90读卡器CSharp示例程序.rar

德卡Z90读卡器CSharp示例程序源码.rar

德卡Z90读卡器读取社保卡,德卡Z90读卡器CSharp示例程序源码的更多相关文章

  1. ArcGIS紧凑型切片读取与应用3-紧凑型批量转分散型(附源码)

    1.前言 上篇介绍了webgis动态加载解析紧凑型切片的例子,现在我们使用逆向思维实现紧凑型切片转分散型切片,在实际工作中很有用处,紧凑型切片易于拷贝,但读取只有部署到Arcgis Server才行. ...

  2. ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)

    1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...

  3. [spring源码学习]三、IOC源码——自定义配置文件读取

    一.环境准备 在文件读取的时候,第9步我们发现spring会根据标签的namespace来选择读取方式,联想spring里提供的各种标签,比如<aop:xxx>等应该会有不同的读取和解析方 ...

  4. ArcGIS紧凑型切片读取与应用1-解析(附源码)

    1.前言 ArcGIS 发布的切片服务分为紧凑型切片和传统的分散型切片以及最新ArcGIS por新增的矢量切片.传统的分散型切片面临的问题是文件个数太多,部署拷贝过程十分的耗时,紧凑型切片是对分散型 ...

  5. OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)

    在上一篇OpenJDK源码研究笔记(七)–Java字节码文件(.class)的结构中,我们大致了解了Java字节码文件的结构. 本篇详细地介绍了如何读取.class文件的大部分细节. 1.构造文件  ...

  6. Android读取RAM,ROM,SD卡容量

    1)简介 一般人们在买手机的时候,在手机配置上都会出现"内存容量:512MB ROM+512MB RAM "等等类似这样的说明,可能很多人都知道RAM的意思就是运存的意思,但是对于 ...

  7. 017 Android 获取手机SIM卡序列号和读取联系人

    1.获取手机SIM卡序列号 //5.存储sim卡系列号 //5.1获取sim卡系列号 TelephonyManager manager = (TelephonyManager) getSystemSe ...

  8. 【双模卡的相关知识】解SIM卡前需要知道的信息(SIM年分和厂商识别)

    <ignore_js_op> 二.SIM版本问题SIM卡的版本有两种说法,一是有些是制造厂制定的,二是电信公司的制定.下面以移动为例,目前我们手里的SIM有几种版本:v0.v1.v2.v3 ...

  9. 磁条卡,IC卡,ID卡,信用卡芯片卡,信用卡磁条卡 等等的区别

    1.条码卡:该卡卡面上有一串条码,通过扫描枪或者相应的条码读卡器读出该条码卡的卡号.根据条码的不同又分为39码等其它码.条码卡仅仅是一个编号,不存蓄其它内容.特点:价格便宜类似磁卡. 2.磁条卡:类似 ...

随机推荐

  1. 【刷题】BZOJ 3033 太鼓达人

    Description 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和ly ...

  2. MySQL的COUNT()函数理解

    MySQL的COUNT()函数理解 标签(空格分隔): MySQL5.7 COUNT()函数 探讨 写在前面的话 细心的朋友会在平时工作和学习中,可以看到MySQL的COUNT()函数有多种不同的参数 ...

  3. linux中awk工具的使用(转载)

    awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...

  4. 域名、ip、以及通过域名访问网站、虚拟主机

    ip 是一个网站的id,是它的地址. 域名是为了解决ip比较难记住才引出的. 利用nginx来配置虚拟主机,通过域名可以访问该网站. 具体实现详见前面文章. 虚拟主机:可以实现在一台服务器虚拟出多个网 ...

  5. linux c 编程 ------ 串口编程

    http://blog.csdn.net/specialshoot/article/details/50707965 对于串口的打开操作,必须使用O_NOCTTY参数.O_NOCTTY如果路径名指向终 ...

  6. JavaScript中的两种全局对象

    这里总结的东西特别适合先学习c/c++, Java这类标准语言再学JS的童鞋们看,因为JS在程序执行之前就会初始化一个全局对象,这个全局对象到底是什么是跟JS程序运行环境有关的. 根据JavaScri ...

  7. DataGridView刷新数据

    在DataGridView上操作数据之后,无论是增删改都是对数据库进行了操作,而DataGridView这个控件在操作之后是不会变化的,需要重新的去数据库里读取一下数据才行,可以理解为之刷新 Data ...

  8. python---基础知识回顾(一)(引用计数,深浅拷贝,列表推导式,lambda表达式,命名空间,函数参数逆收集,内置函数,hasattr...)

    一:列表和元组(引用计数了解,深浅拷贝了解) 序列:序列是一种数据结构,对其中的元素按顺序进行了编号(从0开始).典型的序列包括了列表,字符串,和元组 列表是可变的(可以进行修改),而元组和字符串是不 ...

  9. bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=3122 等比数列求和公式+BSGS #include<map> #include<c ...

  10. 考研:操作系统:进程同步—信号量实现同步互斥(PV操作)

    进程互斥的硬件实现方法