You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
14 KiB

1 month ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.Reflection;
  6. using System.Runtime.InteropServices;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using ShenTun.IcCard.Common;
  13. namespace ShenTun.IcCard
  14. {
  15. /// <summary>
  16. /// 德卡t10-d身份证读卡器
  17. /// </summary>
  18. public class DCTD10
  19. {
  20. [DllImport(@"DCT10D\dcsdtapi.dll")]
  21. public static extern int DCSDT_Open(int port, int baud); //打开设备
  22. [DllImport(@"DCT10D\dcsdtapi.dll")]
  23. public static extern int DCSDT_Close(int handle); //关闭设备
  24. [DllImport(@"DCT10D\dcsdtapi.dll")]
  25. public static extern int DCSDT_GetSamSerialNumber(int handle, [Out] byte[] number);//获取SAM_V编号。
  26. [DllImport(@"DCT10D\dcsdtapi.dll")]
  27. public static extern int DCSDT_SearchIdCard(int handle, [Out] byte[] management_number, [Out] byte[] serial_number);//查询ID卡。
  28. [DllImport(@"DCT10D\dcsdtapi.dll")]
  29. public static extern int DCSDT_GetIdCardType(int handle);//获取卡类型 0表示失败,==0表示中国人居民身份证,==1外国人永久居留证
  30. [DllImport(@"DCT10D\dcsdtapi.dll")]
  31. public static extern int DCSDT_IdCardRead(int handle, int flags);//读ID卡
  32. [DllImport(@"DCT10D\dcsdtapi.dll")]
  33. public static extern int DCSDT_IdCardContent(int handle, int flag, [Out] byte[] content);//获取ID卡相关内容(中国人居民身份证)。
  34. [DllImport(@"DCT10D\dcsdtapi.dll")]
  35. public static extern int DCSDT_PhotoToBmpFile([In] byte[] photo, [In] byte[] file_name);//转换photo信息到jpg文件。
  36. [DllImport(@"DCT10D\dcsdtapi.dll")]
  37. public static extern int DCSDT_PhotoToJpgBase64([In] byte[] photo, [Out] byte[] base64);//转换photo信息到bmp文件。
  38. #region 外部函数
  39. [DllImport("winmm")]
  40. static extern uint timeGetTime();
  41. [DllImport("winmm")]
  42. static extern void timeBeginPeriod(int t);
  43. [DllImport("winmm")]
  44. static extern void timeEndPeriod(int t);
  45. [DllImport(@"DCT10D\dcrf32.dll")]
  46. public static extern short dc_init(Int16 port, int baud); //初试化
  47. [DllImport(@"DCT10D\dcrf32.dll")]
  48. public static extern short dc_exit(int icdev);
  49. [DllImport(@"DCT10D\dcrf32.dll")]
  50. public static extern short dc_reset(int icdev, uint sec);
  51. [DllImport(@"DCT10D\dcrf32.dll")]
  52. public static extern short dc_config_card(int icdev, char cardtype); //初试化
  53. [DllImport(@"DCT10D\dcrf32.dll")]
  54. public static extern short dc_card(int icdev, byte _Mode, ref uint SnrLen);
  55. //short USER_API dc_card_n(HANDLE icdev, unsigned char _Mode, unsigned int* SnrLen, unsigned char* _Snr);
  56. [DllImport(@"DCT10D\dcrf32.dll")]
  57. public static extern short dc_card_n(int icdev, byte _Mode, ref uint SnrLen, [Out]byte[] _Snr);
  58. //short USER_API dc_beep(HANDLE icdev, unsigned short _Msec);
  59. [DllImport(@"DCT10D\dcrf32.dll")]
  60. public static extern short dc_beep(int icdev, ushort _Msec);
  61. //short USER_API dc_authentication_passaddr(HANDLE icdev, unsigned char _Mode, unsigned char _Addr, unsigned char* passbuff);
  62. [DllImport(@"DCT10D\dcrf32.dll")]
  63. public static extern short dc_authentication_passaddr(int icdev, byte _Mode, byte _Addr, [In]byte[] passbuff);
  64. //short USER_API dc_write(HANDLE icdev, unsigned char _Adr, unsigned char* _Data);
  65. [DllImport(@"DCT10D\dcrf32.dll")]
  66. public static extern short dc_write(int icdev, byte adr, [In] byte[] sdata); //向卡中写入数据
  67. //short USER_API dc_write_hex(HANDLE icdev, unsigned char _Adr, char *_Data);
  68. [DllImport(@"DCT10D\dcrf32.dll")]
  69. public static extern short dc_write_hex(int icdev, int adr, [In] byte[] sdata); //向卡中写入数据(转换为16进制)
  70. //short USER_API dc_read(HANDLE icdev, unsigned char _Adr, unsigned char *_Data);
  71. [DllImport(@"DCT10D\dcrf32.dll")]
  72. public static extern short dc_read(int icdev, byte adr, [Out] byte[] sdata); //从卡中读数据
  73. //short USER_API dc_read_hex(HANDLE icdev, unsigned char _Adr, char *_Data);
  74. [DllImport(@"DCT10D\dcrf32.dll")]
  75. public static extern short dc_read_hex(int icdev, int adr, [Out] byte[] sdata); //从卡中读数据(转换为16进制)
  76. //short USER_API a_hex(unsigned char *a, unsigned char *hex, short len);
  77. [DllImport(@"DCT10D\dcrf32.dll")]
  78. public static extern short a_hex([In] byte[] a, [Out] byte[] hex, short len); //普通字符转换成十六进制字符
  79. //short USER_API hex_a(unsigned char *hex, unsigned char *a, short length);
  80. [DllImport(@"DCT10D\dcrf32.dll")]
  81. public static extern short hex_a([In] byte[] hex, [Out] byte[] a, short length); //普通字符转换成十六进制字符
  82. //short USER_API dc_initval(HANDLE icdev, unsigned char _Adr, unsigned int _Value);
  83. [DllImport(@"DCT10D\dcrf32.dll")]
  84. public static extern short dc_initval(int icdev, byte _Adr, uint _Value); //普通字符转换成十六进制字符
  85. // short USER_API dc_readval(HANDLE icdev, unsigned char _Adr, unsigned int *_Value);
  86. [DllImport(@"DCT10D\dcrf32.dll")]
  87. public static extern short dc_readval(int icdev, byte _Adr, ref uint _Value); //普通字符转换成十六进制字符
  88. // short USER_API dc_increment(HANDLE icdev, unsigned char _Adr, unsigned int _Value);
  89. [DllImport(@"DCT10D\dcrf32.dll")]
  90. public static extern short dc_increment(int icdev, byte _Adr, uint _Value); //普通字符转换成十六进制字符
  91. // short USER_API dc_decrement(HANDLE icdev, unsigned char _Adr, unsigned int _Value);
  92. [DllImport(@"DCT10D\dcrf32.dll")]
  93. public static extern short dc_decrement(int icdev, byte _Adr, uint _Value); //普通字符转换成十六进制字符
  94. //short USER_API dc_restore(HANDLE icdev, unsigned char _Adr);
  95. [DllImport(@"DCT10D\dcrf32.dll")]
  96. public static extern short dc_restore(int icdev, byte _Adr); //普通字符转换成十六进制字符
  97. //short USER_API dc_transfer(HANDLE icdev, unsigned char _Adr);
  98. [DllImport(@"DCT10D\dcrf32.dll")]
  99. public static extern short dc_transfer(int icdev, byte _Adr); //普通字符转换成十六进制字符
  100. //short USER_API dc_pro_resetInt(HANDLE icdev, unsigned char *rlen, unsigned char *receive_data);
  101. [DllImport(@"DCT10D\dcrf32.dll")]
  102. public static extern short dc_pro_resetInt(int icdev, ref byte rlen, [Out]byte[] receive_data); //普通字符转换成十六进制字符
  103. [DllImport(@"DCT10D\dcrf32.dll")]
  104. public static extern short dc_pro_reset(int icdev, ref byte rlen, [Out]byte[] receive_data);
  105. //short USER_API dc_pro_commandlinkInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer, unsigned char timeout);
  106. [DllImport(@"DCT10D\dcrf32.dll")]
  107. public static extern short dc_pro_commandlinkInt(int icdev, uint slen, [In]byte[] sendbuffer, ref uint rlen, [Out]byte[] databuffer, byte timeout); //普通字符转换成十六进制字符
  108. //short USER_API dc_card_b(HANDLE icdev, unsigned char *rbuf);
  109. [DllImport(@"DCT10D\dcrf32.dll")]
  110. public static extern short dc_pro_commandlink(int icdev, byte slen, [In]byte[] sendbuffer, ref byte rlen, [Out]byte[] databuffer, byte timeout, int flag);
  111. [DllImport(@"DCT10D\dcrf32.dll")]
  112. public static extern short dc_card_b(int icdev, [Out]byte[] rbuf); //普通字符转换成十六进制字符
  113. // short USER_API dc_MFPL0_writeperso(HANDLE icdev, unsigned int BNr, unsigned char *dataperso);
  114. [DllImport(@"DCT10D\dcrf32.dll")]
  115. public static extern short dc_MFPL0_writeperso(int icdev, [In]uint BNr, [Out]byte[] dataperso); //普通字符转换成十六进制字符
  116. //short USER_API dc_auth_ulc(HANDLE icdev, unsigned char *key);
  117. [DllImport(@"DCT10D\dcrf32.dll")]
  118. public static extern short dc_auth_ulc(int icdev, [In]byte[] key); //普通字符转换成十六进制字符
  119. //short USER_API dc_verifypin_4442(HANDLE icdev, unsigned char *passwd);
  120. [DllImport(@"DCT10D\dcrf32.dll")]
  121. public static extern short dc_verifypin_4442(int icdev, [In]byte[] passwd); //普通字符转换成十六进制字符
  122. //short USER_API dc_write_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  123. [DllImport(@"DCT10D\dcrf32.dll")]
  124. public static extern short dc_write_4442(int icdev, short offset, short length, [In]byte[] data_buffer); //普通字符转换成十六进制字符
  125. //short USER_API dc_read_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  126. [DllImport(@"DCT10D\dcrf32.dll")]
  127. public static extern short dc_read_4442(int icdev, short offset, short length, [Out]byte[] data_buffer); //普通字符转换成十六进制字符
  128. [DllImport(@"DCT10D\dcrf32.dll")]
  129. public static extern short dc_verifypin_4428(int icdev, [In]byte[] passwd); //普通字符转换成十六进制字符
  130. //short USER_API dc_write_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  131. [DllImport(@"DCT10D\dcrf32.dll")]
  132. public static extern short dc_write_4428(int icdev, short offset, short length, [In]byte[] data_buffer); //普通字符转换成十六进制字符
  133. //short USER_API dc_read_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  134. [DllImport(@"DCT10D\dcrf32.dll")]
  135. public static extern short dc_read_4428(int icdev, short offset, short length, [Out]byte[] data_buffer); //普通字符转换成十六进制字符
  136. //short USER_API dc_setcpu(HANDLE icdev, unsigned char _Byte);
  137. [DllImport(@"DCT10D\dcrf32.dll")]
  138. public static extern short dc_setcpu(int icdev, [In]byte _Byte); //普通字符转换成十六进制字符
  139. //short USER_API dc_write_24c(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  140. [DllImport(@"DCT10D\dcrf32.dll")]
  141. public static extern short dc_write_24c(int icdev, short offset, short length, [In]byte[] data_buffer); //普通字符转换成十六进制字符
  142. //short USER_API dc_read_4442(HANDLE icdev, short offset, short length, unsigned char *data_buffer);
  143. [DllImport(@"DCT10D\dcrf32.dll")]
  144. public static extern short dc_read_24c(int icdev, short offset, short length, [Out]byte[] data_buffer); //普通字符转换成十六进制字符
  145. //short USER_API dc_cpureset(HANDLE icdev, unsigned char *rlen, unsigned char *databuffer);
  146. [DllImport(@"DCT10D\dcrf32.dll")]
  147. public static extern short dc_cpureset(int icdev, ref byte rlen, [Out]byte[] databuffer); //普通字符转换成十六进制字符
  148. //short USER_API dc_cpuapduInt(HANDLE icdev, unsigned int slen, unsigned char *sendbuffer, unsigned int *rlen, unsigned char *databuffer);
  149. [DllImport(@"DCT10D\dcrf32.dll")]
  150. public static extern short dc_cpuapduInt(int icdev, uint slen, [In]byte[] sendbuffer, ref uint rlen, [Out]byte[] databuffer); //普通字符转换成十六进制字符
  151. [DllImport(@"DCT10D\dcrf32.dll")]
  152. public static extern short dc_SamAReadCardInfo(int handle, int type, ref int text_len, [Out]byte[] text, ref int photo_len, [Out]byte[] photo, ref int fingerprint_len, [Out]byte[] fingerprint, ref int extra_len, [Out] byte[] extra);
  153. [DllImport(@"DCT10D\dcrf32.dll")]
  154. public static extern short dc_find_i_d(int handle);
  155. [DllImport(@"DCT10D\dcrf32.dll")]
  156. public static extern int dc_start_i_d(int handle);
  157. [DllImport(@"DCT10D\dcrf32.dll")]
  158. public static extern IntPtr dc_i_d_query_name(int handle);
  159. [DllImport(@"DCT10D\dcrf32.dll")]
  160. public static extern IntPtr dc_i_d_query_sex(int handle);
  161. [DllImport(@"DCT10D\dcrf32.dll")]
  162. public static extern IntPtr dc_i_d_query_nation(int handle);
  163. [DllImport(@"DCT10D\dcrf32.dll")]
  164. public static extern IntPtr dc_i_d_query_birth(int handle);
  165. [DllImport(@"DCT10D\dcrf32.dll")]
  166. public static extern IntPtr dc_i_d_query_address(int handle);
  167. [DllImport(@"DCT10D\dcrf32.dll")]
  168. public static extern IntPtr dc_i_d_query_id_number(int handle);
  169. [DllImport(@"DCT10D\dcrf32.dll")]
  170. public static extern IntPtr dc_i_d_query_department(int handle);
  171. [DllImport(@"DCT10D\dcrf32.dll")]
  172. public static extern IntPtr dc_i_d_query_expire_day(int handle);
  173. [DllImport(@"DCT10D\dcrf32.dll")]
  174. public static extern short dc_i_d_query_photo_bmp_buffer(int handle, [Out]byte[] bmp_buffer, ref int bmp_len);
  175. [DllImport(@"DCT10D\dcrf32.dll")]
  176. public static extern short dc_i_d_query_photo_file(int handle, [Out]byte[] FileName);
  177. [DllImport(@"DCT10D\dcrf32.dll")]
  178. public static extern short dc_end_i_d(int handle);
  179. [DllImport(@"DCT10D\dcrf32.dll")]
  180. public static extern short dc_ParseTextInfo(int handle, int charset, int info_len, [Out]byte[] info, [Out]byte[] name, [Out]byte[] sex, [Out]byte[] nation, [Out]byte[] birth_day, [Out]byte[] address, [Out]byte[] id_number, [Out]byte[] department, [Out] byte[] expire_start_day, [Out]byte[] expire_end_day, [Out] byte[] reserved);
  181. [DllImport(@"DCT10D\dcrf32.dll")]
  182. public static extern short dc_ParseTextInfoForForeigner(int handle, int charset, int info_len, [Out]byte[] info, [Out]byte[] english_name, [Out]byte[] sex, [Out]byte[] id_number, [Out]byte[] citizenship, [Out] byte[] chinese_name, [Out]byte[] expire_start_day, [Out] byte[] expire_end_day, [Out] byte[] birth_day, [Out]byte[] version_number, [Out]byte[] department_code, [Out] byte[] type_sign, [Out]byte[] reserved);
  183. [DllImport(@"DCT10D\dcrf32.dll")]
  184. public static extern short dc_ParsePhotoInfo(int handle, int type, int info_len, [Out]byte[] info, ref int photo_len, [Out]byte[] photo);
  185. [DllImport(@"DCT10D\dcrf32.dll")]
  186. public static extern short dc_ParseOtherInfo(int icdev, int flag, [In]byte[] in_info, [Out]byte[] out_info);
  187. [DllImport(@"DCT10D\dcrf32.dll")]
  188. public static extern short dc_Scan2DBarcodeStart(int icdev, byte mode);
  189. [DllImport(@"DCT10D\dcrf32.dll")]
  190. public static extern short dc_Scan2DBarcodeGetData(int icdev, ref int rlen, [Out]byte[] rdata);
  191. [DllImport(@"DCT10D\dcrf32.dll")]
  192. public static extern short dc_Scan2DBarcodeExit(int icdev);
  193. #endregion
  194. }
  195. }