123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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<String> 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<String> result = new ResultMessage<String>();
- 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<String> stopResult = new ResultMessage<String>();
- stopResult.IsSuccess = false;
- stopResult.Message = "正常退出。";
- return stopResult;
- }
- else
- {
- ResultMessage<String> result = new ResultMessage<String>();
- result.IsSuccess = false;
- result.Message = "找不到读卡器的端口,请确认是否已经安装了身份证读卡器硬件。";
- return result;
- }
- }
- catch (Exception ex)
- {
- ResultMessage<String> result = new ResultMessage<String>();
- result.IsSuccess = false;
- result.Message = ex.Message;
- return result;
- }
- finally
- {
- IDCert.CloseComm();
- }
- }
- }
- }
|