注:目前大部分省份已上线国家医保,读取社会保障卡可以直接问医院要当地医保局下发的动态库进行读取。每个省份读取方式均有差异。
大部分地区支持读卡器免Psam卡交易。
文章中有测试工具与最新德卡提供的对应开发包。
补充遗漏的方法:Common.getNation、 Hex2ByteArr
--------------------------------------------------------------------------------------------------------------------------------
参考地址:https://so.youkuaiyun.com/so/search?q=%E7%A4%BE%E4%BF%9D%E5%8D%A1&t=blog&u=weixin_30485799
引用的SDK方法
[DllImport("dcrf32.dll")]
public static extern short dc_beep(int icdev, ushort _Msec);//设备蜂鸣
[DllImport("dcrf32.dll")]
public static extern short dc_setcpu(int icdev, [In]byte _Byte); //设置当前接触式卡座
[DllImport("dcrf32.dll")]
public static extern short dc_cpureset(int icdev, ref byte rlen, [Out]byte[] databuffer);//接触式CPU卡复位
[DllImport("dcrf32.dll")]
public static extern short hex_a([In] byte[] hex, [Out] byte[] a, short length);//普通数据转换16进制字符串(短转长)
[DllImport("dcrf32.dll")]
public static extern short dc_cpuapduInt(int icdev, uint slen, [In]byte[] sendbuffer, ref uint rlen, [Out]byte[] databuffer);//指令交互
社保卡信息类
public class MedicareCard
{
/// <summary>
/// 发卡地区行政区划代码(卡识别码前6位)
/// </summary>
public string IssuingAreaCode { get; set; }
/// <summary>
/// 社会保障号码(身份证号码)
/// </summary>
public string SocialNo{ get; set; }
/// <summary>
/// 卡号
/// </summary>
public string HealthCareCardNo{ get; set; }
/// <summary>
/// 卡识别码
/// </summary>
public string IdentificationCode{ get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name{ get; set; }
/// <summary>
/// 出生地
/// </summary>
public string Address{ get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex{ get; set; }
/// <summary>
/// 民族
/// </summary>
public string Nation{ get; set; }
/// <summary>
/// 出生日期
/// </summary>
public string Birthdate{ get; set; }
/// <summary>
/// 社保卡余额
/// </summary>
public string Balance{ get; set; }
/// <summary>
/// 卡复位信息(仅取历史字节)
/// </summary>
public string CardResetInformation{ get; set; }
/// <summary>
/// 规范版本
/// </summary>
public string CanonicalVersion{ get; set; }
/// <summary>
/// 发卡日期
/// </summary>
public string StartDate{ get; set; }
/// <summary>
/// 卡有效期
/// </summary>
public string EndDate{ get; set; }
/// <summary>
/// 终端机编号
/// </summary>
public string TerminalNO{ get; set; }
/// <summary>
/// 终端设备号
/// </summary>
public string TerminalEquipmentNo{ get; set; }
}
调用代码
public MedicareCard IC_ReadMedicare()
{
MedicareCard CraeCard = new MedicareCard();
string str;
int st;
dc_beep(Handle, 10);
//射频复位
dc_setcpu(Handle, (byte)ContactClamp.NO1); //设置接触式卡座
byte rcardlen = 0;
uint rlen = 0;
byte[] databuffer = new byte[100];
byte[] databufferhex = new byte[100];
dc_cpureset(Handle, ref rcardlen, databuffer);//接触式CPU卡复位
hex_a(databuffer, databufferhex, (short)rlen);
/*
选择应用环境 00 A4 04 00 0F 73 78 31 2E 73 68 2E C9 E7 BB E1 B1 A3 D5 CF 00
选择EF05文件 00 A4 02 00 02 EF 05 00 选择EF06文件 00A402000