using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Threading; using System.Web; namespace EmisTerminal.EIF { public class IDCert { [DllImport("termb.dll")] public static extern int InitComm(int Port); [DllImport("termb.dll")] public static extern int CloseComm(); [DllImport("termb.dll")] public static extern int Authenticate(); [DllImport("termb.dll")] public static extern int Read_Content(int active); [DllImport("termb.dll")] public static extern int Read_Content_Path(string cPath, int active); [DllImport("termb.dll")] public static extern IntPtr GetIDNo(); [DllImport("termb.dll", CharSet = CharSet.Auto)] public static extern bool GetIDNo2(ref byte sBuf, ref int nLen); [DllImport("termb.dll")] public static extern int GetSAMID(IntPtr c); [DllImport("termb.dll")] public static extern int ResetCard(int nReaderSlot, ref string pRecvDatas, ref int nRecvLen); public static bool isStop = false; public static int InitCommExt() { for (int i = 1001; i <= 1016; i++) { if (InitComm(i) == 0) { return i; } } for (int i = 1; i <= 16; i++) { if (InitComm(i) == 0) { return i; } } if (InitComm(2401) == 0) { return 2401; } return -6; } public static ResultMessage Check() { try { isStop = true; Thread.Sleep(500); isStop = false; int port = IDCert.InitCommExt(); if (port >= 0) { while (!isStop) { IntPtr c = Marshal.AllocHGlobal(100); int samRet = IDCert.GetSAMID(c); int ret = IDCert.Authenticate(); if (ret == 0) { //int readRet = IDCert.Read_Content(1); int readRet = IDCert.Read_Content_Path(HttpContext.Current.Server.MapPath("~/"), 1); if (readRet == 0) { ResultMessage result = new ResultMessage(); result.IsSuccess = true; result.Message = "成功"; byte[] arrTmp = new byte[100]; int nLen = 100; IDCert.GetIDNo2(ref arrTmp[0], ref nLen); result.Data = System.Text.Encoding.GetEncoding("GB2312").GetString(arrTmp.Take(nLen).ToArray()); return result; } else { IDCert.CloseComm(); IDCert.InitComm(port); } } else if (ret == -12) { IDCert.CloseComm(); IDCert.InitComm(port); } Thread.Sleep(300); } ResultMessage stopResult = new ResultMessage(); stopResult.IsSuccess = false; stopResult.Message = "正常退出。"; return stopResult; } else { ResultMessage result = new ResultMessage(); result.IsSuccess = false; result.Message = "找不到读卡器的端口,请确认是否已经安装了身份证读卡器硬件。"; return result; } } catch (Exception ex) { ResultMessage result = new ResultMessage(); result.IsSuccess = false; result.Message = ex.Message; return result; } finally { IDCert.CloseComm(); } } } }