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.

261 lines
12 KiB

1 month ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Runtime.InteropServices;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using System.IO;
  12. using System.IO.Ports;
  13. namespace ShenTun.IcCard.Test
  14. {
  15. public partial class Form2 : Form
  16. {
  17. [DllImport("termb.dll")]
  18. static extern int InitComm(int port);//连接身份证阅读器
  19. [DllImport("termb.dll")]
  20. static extern int InitCommExt();//自动搜索身份证阅读器并连接身份证阅读器
  21. [DllImport("termb.dll")]
  22. static extern int CloseComm();//断开与身份证阅读器连接
  23. [DllImport("termb.dll")]
  24. static extern int Authenticate();//判断是否有放卡,且是否身份证
  25. [DllImport("termb.dll")]
  26. public static extern int Read_Content(int index);//读卡操作,信息文件存储在dll所在下
  27. [DllImport("termb.dll")]
  28. public static extern int ReadContent(int index);//读卡操作,信息文件存储在dll所在下
  29. [DllImport("termb.dll")]
  30. static extern int GetSAMID(StringBuilder SAMID);//获取SAM模块编号
  31. [DllImport("termb.dll")]
  32. static extern int GetSAMIDEx(StringBuilder SAMID);//获取SAM模块编号(10位编号)
  33. [DllImport("termb.dll")]
  34. static extern int GetBmpPhoto(string PhotoPath);//解析身份证照片
  35. [DllImport("termb.dll")]
  36. static extern int GetBmpPhotoToMem(byte[] imageData, int cbImageData);//解析身份证照片
  37. [DllImport("termb.dll")]
  38. static extern int GetBmpPhotoExt();//解析身份证照片
  39. [DllImport("termb.dll")]
  40. static extern int Reset_SAM();//重置Sam模块
  41. [DllImport("termb.dll")]
  42. static extern int GetSAMStatus();//获取SAM模块状态
  43. [DllImport("termb.dll")]
  44. static extern int GetCardInfo(int index, StringBuilder value);//解析身份证信息
  45. [DllImport("termb.dll")]
  46. static extern int ExportCardImageV();//生成竖版身份证正反两面图片(输出目录:dll所在目录的cardv.jpg和SetCardJPGPathNameV指定路径)
  47. [DllImport("termb.dll")]
  48. static extern int ExportCardImageH();//生成横版身份证正反两面图片(输出目录:dll所在目录的cardh.jpg和SetCardJPGPathNameH指定路径)
  49. [DllImport("termb.dll")]
  50. static extern int SetTempDir(string DirPath);//设置生成文件临时目录
  51. [DllImport("termb.dll")]
  52. static extern int GetTempDir(StringBuilder path, int cbPath);//获取文件生成临时目录
  53. [DllImport("termb.dll")]
  54. static extern void GetPhotoJPGPathName(StringBuilder path, int cbPath);//获取jpg头像全路径名
  55. [DllImport("termb.dll")]
  56. static extern int SetPhotoJPGPathName(string path);//设置jpg头像全路径名
  57. [DllImport("termb.dll")]
  58. static extern int SetCardJPGPathNameV(string path);//设置竖版身份证正反两面图片全路径
  59. [DllImport("termb.dll")]
  60. static extern int GetCardJPGPathNameV(StringBuilder path, int cbPath);//获取竖版身份证正反两面图片全路径
  61. [DllImport("termb.dll")]
  62. static extern int SetCardJPGPathNameH(string path);//设置横版身份证正反两面图片全路径
  63. [DllImport("termb.dll")]
  64. static extern int GetCardJPGPathNameH(StringBuilder path, int cbPath);//获取横版身份证正反两面图片全路径
  65. [DllImport("termb.dll")]
  66. static extern int GetPeopleName(StringBuilder data, int cbData);//获取姓名
  67. [DllImport("termb.dll")]
  68. static extern int GetPeopleSex(StringBuilder data, int cbData);//获取性别
  69. [DllImport("termb.dll")]
  70. static extern int GetPeopleNation(StringBuilder data, int cbData);//获取民族
  71. [DllImport("termb.dll")]
  72. static extern int GetPeopleBirthday(StringBuilder data, int cbData);//获取生日(YYYYMMDD)
  73. [DllImport("termb.dll")]
  74. static extern int GetPeopleAddress(StringBuilder data, int cbData);//获取地址
  75. [DllImport("termb.dll")]
  76. static extern int GetPeopleIDCode(StringBuilder data, int cbData);//获取身份证号
  77. [DllImport("termb.dll")]
  78. static extern int GetDepartment(StringBuilder data, int cbData);//获取签发机关
  79. [DllImport("termb.dll")]
  80. static extern int GetStartDate(StringBuilder data, int cbData);//获取有效期起始日期(YYYYMMDD)
  81. [DllImport("termb.dll")]
  82. static extern int GetEndDate(StringBuilder data, int cbData);//获取有效期截止日期(YYYYMMDD)
  83. [DllImport("termb.dll")]
  84. static extern int getBMPPhotoBase64(StringBuilder data, int cbData);//获取BMP头像Base64编码
  85. [DllImport("termb.dll")]
  86. static extern int getJPGPhotoBase64(StringBuilder data, int cbData);//获取JPG头像Base64编码
  87. [DllImport("termb.dll")]
  88. static extern int getJPGCardBase64V(StringBuilder data, int cbData);//获取竖版身份证正反两面JPG图像base64编码字符串
  89. [DllImport("termb.dll")]
  90. static extern int getJPGCardBase64H(StringBuilder data, int cbData);//获取横版身份证正反两面JPG图像base64编码字符串
  91. [DllImport("termb.dll")]
  92. static extern int HIDVoice(int nVoice);//语音提示。。仅适用于与带HID语音设备的身份证阅读器(如ID200)
  93. [DllImport("termb.dll")]
  94. static extern int IC_SetDevNum(int iPort, StringBuilder data, int cbdata);//设置发卡器序列号
  95. [DllImport("termb.dll")]
  96. static extern int IC_GetDevNum(int iPort, StringBuilder data, int cbdata);//获取发卡器序列号
  97. [DllImport("termb.dll")]
  98. static extern int IC_GetDevVersion(int iPort, StringBuilder data, int cbdata);//设置发卡器序列号
  99. [DllImport("termb.dll")]
  100. static extern int IC_WriteData(int iPort, int keyMode, int sector, int idx, StringBuilder key, StringBuilder data, int cbdata, ref uint snr);//写数据
  101. [DllImport("termb.dll")]
  102. static extern int IC_ReadData(int iPort, int keyMode, int sector, int idx, StringBuilder key, StringBuilder data, int cbdata, ref uint snr);//du数据
  103. [DllImport("termb.dll")]
  104. static extern int IC_GetICSnr(int iPort, ref uint snr);//读IC卡物理卡号
  105. [DllImport("termb.dll")]
  106. static extern int IC_GetIDSnr(int iPort, StringBuilder data, int cbdata);//读身份证物理卡号
  107. [DllImport("termb.dll")]
  108. static extern int getEnName(StringBuilder data, int cbdata);//获取英文名
  109. [DllImport("termb.dll")]
  110. static extern int getCnName(StringBuilder data, int cbdata);//获取中文名
  111. [DllImport("termb.dll")]
  112. static extern int getPassNum(StringBuilder data, int cbdata);//获取港澳台居通行证号码
  113. [DllImport("termb.dll")]
  114. static extern int getVisaTimes();//获取签发次数
  115. [DllImport("termb.dll")]
  116. static extern int IC_ChangeSectorKey(int iPort, int keyMode, int nSector, StringBuilder oldKey, StringBuilder newKey);
  117. [DllImport("termb.DLL", CallingConvention = CallingConvention.StdCall)]
  118. public static extern int GetPhotoBMP(StringBuilder data, int iLen);
  119. private int cbDataSize = 100;
  120. public Form2()
  121. {
  122. InitializeComponent();
  123. for (int i = 0; i < 16; i++)
  124. {
  125. comboBox_Key.Items.Add("" + i);
  126. }
  127. for (int i = 0; i < 3; i++)
  128. {
  129. comboBox_Clock.Items.Add("" + i);
  130. }
  131. string[] sAllPort = null;
  132. try
  133. {
  134. sAllPort = SerialPort.GetPortNames();
  135. int nPortNu = sAllPort.Length;
  136. for (int i = 0; i < nPortNu; i++)
  137. {
  138. int nPort = Convert.ToInt32(sAllPort[i].Substring(sAllPort[i].Length - 1, 1));
  139. StringBuilder sb = new StringBuilder(cbDataSize);
  140. if (1 == IC_GetDevVersion(nPort, sb, cbDataSize))
  141. {
  142. comboBox_Port.Items.Add(sAllPort[i]);
  143. }
  144. }
  145. }
  146. catch (Exception ex)
  147. {
  148. throw new Exception("获取计算机COM口列表失败!\r\n错误信息:" + ex.Message);
  149. }
  150. }
  151. private void Form2_Load(object sender, EventArgs e)
  152. {
  153. }
  154. int Port = 0;
  155. bool IsConnected = false;
  156. private void button1_Click(object sender, EventArgs e)
  157. {
  158. int AutoSearchReader = InitComm(1001);
  159. if (AutoSearchReader > 0)
  160. {
  161. Port = AutoSearchReader;
  162. IsConnected = true;
  163. textBox_Name.Text = AutoSearchReader.ToString();
  164. StringBuilder sb = new StringBuilder(cbDataSize);
  165. //GetSAMID(sb);
  166. MessageBox.Show("连接身份证阅读器成功,SAM模块编号:" + sb);
  167. //button_Connect.Enabled = false;
  168. //button_ReadCard.Enabled = true;
  169. //button_DisConnect.Enabled = true;
  170. return;
  171. }
  172. else
  173. {
  174. MessageBox.Show("检查是否正确连接设备");
  175. }
  176. }
  177. private void button2_Click(object sender, EventArgs e)
  178. {
  179. int FindCard = Authenticate();//FindCard>0 表示成功
  180. /*
  181. if (FindCard != 1)
  182. {
  183. //ClearData();
  184. return;
  185. }
  186. * */
  187. //读卡
  188. int rs = Read_Content(1);
  189. if (rs != 1 && rs != 2 && rs != 3)
  190. {
  191. //ClearData();
  192. return;
  193. }
  194. StringBuilder sb = new StringBuilder(cbDataSize);
  195. GetPeopleName(sb, cbDataSize);
  196. textBox_Name.Text = sb.ToString();
  197. //民族/国家
  198. GetPeopleNation(sb, cbDataSize);
  199. textBox_NationOrCountry.Text = sb.ToString();
  200. //性别
  201. GetPeopleSex(sb, cbDataSize);
  202. textBox_Sex.Text = sb.ToString();
  203. //出生
  204. GetPeopleBirthday(sb, cbDataSize);
  205. textBox_BornDate.Text = sb.ToString();
  206. // sb.ToString().Substring(0, 4) - sb.ToString().Substring(4, 2) - sb.ToString().Substring(6, 2);
  207. //地址
  208. GetPeopleAddress(sb, cbDataSize);
  209. string ad = sb.ToString();
  210. textBox_Address.Text = ad;
  211. //号码
  212. GetPeopleIDCode(sb, cbDataSize);
  213. textBox_IDCardNum.Text = sb.ToString();
  214. //机关
  215. GetDepartment(sb, cbDataSize);
  216. textBox_Issue.Text = sb.ToString();
  217. //有效期
  218. GetStartDate(sb, cbDataSize);
  219. string aa = sb.ToString();
  220. GetEndDate(sb, cbDataSize);
  221. textBox_ExpiredDate.Text = aa + sb.ToString();
  222. /*
  223. //通行证号
  224. getPassNum(sb, cbDataSize);
  225. textBox_PassNum.Text = sb.ToString();
  226. //签证次数
  227. textBox_VisaTimes.Text = "" + getVisaTimes();
  228. //英文名
  229. getEnName(sb, cbDataSize);
  230. textBox_EnName.Text = sb.ToString();
  231. //中文名
  232. getCnName(sb, cbDataSize);
  233. textBox_CnName.Text = sb.ToString();
  234. *
  235. //证件类型
  236. GetCardInfo(105, sb);
  237. if ("1" == sb.ToString())
  238. {
  239. textBox_CardType.Text = "居民身份证";
  240. }
  241. else if ("3" == sb.ToString())
  242. {
  243. textBox_CardType.Text = "港澳台居住证";
  244. }
  245. else
  246. {
  247. textBox_CardType.Text = "外国人居住证";
  248. }
  249. * */
  250. StringBuilder sb1 = new StringBuilder(cbDataSize);
  251. int cbPhoto = 256 * 1024;
  252. int nRet = GetPhotoBMP(sb1, cbPhoto);
  253. string photo = sb1.ToString();
  254. }
  255. }
  256. }