C#使用德卡T10读取社报告卡基本信息
生活随笔
收集整理的這篇文章主要介紹了
C#使用德卡T10读取社报告卡基本信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考地址:https://so.csdn.net/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文件 00A4020002EF0600讀卡號 00 B2 07 00 0B 讀取社會保障卡號碼 00 B2 08 00 14讀姓名 00 B2 09 00 20讀性別 00 B2 0A 00 03讀民族 00 B2 0B 00 03讀出生日期 00 B2 0D 00 06*/byte[] sendbuffer = new byte[22];sendbuffer[0] = 0x00;sendbuffer[1] = 0xA4;sendbuffer[2] = 0x04;sendbuffer[3] = 0x00;sendbuffer[4] = 0x0F;sendbuffer[5] = 0x73;sendbuffer[6] = 0x78;sendbuffer[7] = 0x31;sendbuffer[8] = 0x2E;sendbuffer[9] = 0x073;sendbuffer[10] = 0x68;sendbuffer[11] = 0x2E;sendbuffer[12] = 0xC9;sendbuffer[13] = 0xE7;sendbuffer[14] = 0xBB;sendbuffer[15] = 0xE1;sendbuffer[16] = 0xB1;sendbuffer[17] = 0xA3;sendbuffer[18] = 0xD5;sendbuffer[19] = 0xCF;sendbuffer[20] = 0x00;st = dc_cpuapduInt(Handle, 21, sendbuffer, ref rlen, databuffer);// 選擇應用環境 00 A4 04 00 0F 73 78 31 2E 73 68 2E C9 E7 BB E1 B1 A3 D5 CF 00byte[] sendbuffer1 = new byte[9];sendbuffer1[0] = 0x00;sendbuffer1[1] = 0xA4;sendbuffer1[2] = 0x02;sendbuffer1[3] = 0x00;sendbuffer1[4] = 0x02;sendbuffer1[5] = 0xEF;sendbuffer1[6] = 0x05;sendbuffer1[7] = 0x00;st = dc_cpuapduInt(Handle, 8, sendbuffer1, ref rlen, databuffer);// 選擇EF05文件 00 A4 02 00 02 EF 05 00 byte[] sendbuffer2 = new byte[6];sendbuffer2[0] = 0x00;sendbuffer2[1] = 0xB2;sendbuffer2[2] = 0x07;sendbuffer2[3] = 0x00;sendbuffer2[4] = 0x0B;st = dc_cpuapduInt(Handle, 5, sendbuffer2, ref rlen, databuffer);//讀社保卡號if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = str.Substring(4, 18);string tempbuffer = Encoding.Default.GetString(Common.Hex2ByteArr(DealDate));CraeCard.HealthCareCardNo = tempbuffer;}byte[] sendbuffer1_2 = new byte[6];sendbuffer1_2[0] = 0x00;sendbuffer1_2[1] = 0xB2;sendbuffer1_2[2] = 0x05;sendbuffer1_2[3] = 0x00;sendbuffer1_2[4] = 0x06;st = dc_cpuapduInt(Handle, 5, sendbuffer1_2, ref rlen, databuffer); //發卡日期if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = str.Substring(4, 8);CraeCard.StartDate = DealDate;}byte[] sendbuffer1_3 = new byte[6];sendbuffer1_3[0] = 0x00;sendbuffer1_3[1] = 0xB2;sendbuffer1_3[2] = 0x06;sendbuffer1_3[3] = 0x00;sendbuffer1_3[4] = 0x06;st = dc_cpuapduInt(Handle, 5, sendbuffer1_3, ref rlen, databuffer); //卡有效期if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = str.Substring(4, 8);CraeCard.EndDate = DealDate;}byte[] sendbuffer1_4 = new byte[6];sendbuffer1_4[0] = 0x00;sendbuffer1_4[1] = 0xB2;sendbuffer1_4[2] = 0x01;sendbuffer1_4[3] = 0x00;sendbuffer1_4[4] = 0x12;st = dc_cpuapduInt(Handle, 5, sendbuffer1_4, ref rlen, databuffer); //卡識別碼if (st != 0){return null;}else{ hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = str.Substring(4, 32);CraeCard.IdentificationCode = DealDate;CraeCard.IssuingAreaCode = DealDate.Substring(0, 6);}//byte[] sendbuffer2_1 = new byte[9];sendbuffer2_1[0] = 0x00;sendbuffer2_1[1] = 0xA4;sendbuffer2_1[2] = 0x02;sendbuffer2_1[3] = 0x00;sendbuffer2_1[4] = 0x02;sendbuffer2_1[5] = 0xEF;sendbuffer2_1[6] = 0x06;sendbuffer2_1[7] = 0x00;st = dc_cpuapduInt(Handle, 8, sendbuffer2_1, ref rlen, databuffer);// 選擇EF06文件 00A4020002EF0600byte[] sendbuffer3 = new byte[6];sendbuffer3[0] = 0x00;sendbuffer3[1] = 0xB2;sendbuffer3[2] = 0x08;sendbuffer3[3] = 0x00;sendbuffer3[4] = 0x14;st = dc_cpuapduInt(Handle, 5, sendbuffer3, ref rlen, databuffer);//讀社會保障卡號碼00 B2 08 00 14 if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = str.Substring(4, 36);string tempbuffer = Encoding.Default.GetString(Common.Hex2ByteArr(DealDate));CraeCard.SocialNo = tempbuffer;}byte[] sendbuffer4 = new byte[6];sendbuffer4[0] = 0x00;sendbuffer4[1] = 0xB2;sendbuffer4[2] = 0x09;sendbuffer4[3] = 0x00;sendbuffer4[4] = 0x20;st = dc_cpuapduInt(Handle, 5, sendbuffer4, ref rlen, databuffer);//姓名00 B2 09 00 20 //091ED3DAD1F3D1F30000000000000000000000000000000000000000000000009000if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = str.Substring(4, 12);string tempbuffer = Encoding.Default.GetString(Common.Hex2ByteArr(DealDate));CraeCard.Name = tempbuffer.TrimEnd('\0');//去除\0 避免序列化出錯}//byte[] sendbuffer5 = new byte[6];sendbuffer5[0] = 0x00;sendbuffer5[1] = 0xB2;sendbuffer5[2] = 0x0A;sendbuffer5[3] = 0x00;sendbuffer5[4] = 0x03;st = dc_cpuapduInt(Handle, 5, sendbuffer5, ref rlen, databuffer);//性別00 B2 0A 00 03if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);//0A01329000string DealDate = str.Substring(4, 2);string tempbuffer = Encoding.Default.GetString(Common.Hex2ByteArr(DealDate)) == "1" ? "男" : "女";CraeCard.Sex = tempbuffer;}byte[] sendbuffer6 = new byte[6];sendbuffer6[0] = 0x00;sendbuffer6[1] = 0xB2;sendbuffer6[2] = 0x0B;sendbuffer6[3] = 0x00;sendbuffer6[4] = 0x03;st = dc_cpuapduInt(Handle, 5, sendbuffer6, ref rlen, databuffer);//民族00 B2 0B 00 03if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = Common.getNational(str.Substring(4, 2));CraeCard.Nation = DealDate;}byte[] sendbuffer7 = new byte[6];sendbuffer7[0] = 0x00;sendbuffer7[1] = 0xB2;sendbuffer7[2] = 0x0D;sendbuffer7[3] = 0x00;sendbuffer7[4] = 0x06;st = dc_cpuapduInt(Handle, 5, sendbuffer7, ref rlen, databuffer);//出生日期00 B2 0D 00 06if (st != 0){return null;}else{hex_a(databuffer, databufferhex, (short)rlen);str = Encoding.Default.GetString(databufferhex);string DealDate = str.Substring(4, 8);CraeCard.Birthdate = DealDate;} return CraeCard;}總結
以上是生活随笔為你收集整理的C#使用德卡T10读取社报告卡基本信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android---加速传感器
- 下一篇: 电子血压计设计