身份证读卡设备-神思电子

操作顺序:

  • 打开设备,获取句柄
  • 循环读卡
  • 判断设备是否断电
  • 判断是否读到卡
  • 判断是否读卡成功
  • 获取姓名、身份证号码、地址信息

接口实现:
采用Windows api的接口方式,通过dllimport引入Windows api方法。

打开设备

private int Open()
{
    int g_handle = 0;
    try
    {
        g_handle = SS728M05Comom.ss_reader_open();
        if (g_handle <= 0)
        { 
            tsslMsg.Text = "连接设备失败!" + "," + DateTime.Now.TimeOfDay.ToString().Substring(0,8);
        }
        else
        { 
            return g_handle;
        }
    }
    catch (Exception ex)
    { 
        tsslMsg.Text = "连接设备异常!" + "," + DateTime.Now.TimeOfDay.ToString().Substring(0,8);
        return 0 ;
    }
    finally
    {
        
    }
    return g_handle;
}

关闭设备

private void Close(int g_handle)
{ 
    try
    {
        int iReturn = 0;
        iReturn = SS728M05Comom.ss_reader_close(g_handle);
        if (iReturn != 0)//关闭失败
        {
            tsslMsg.Text = "读卡器关闭失败" + "," + DateTime.Now.TimeOfDay.ToString().Substring(0,8);
            return;
        }
        else//关闭成功
        {

        }
    }
    catch (Exception ex)
    { 
        return;
    }
    finally
    {
        g_handle = 0; 
    } 
}

读卡

while (true)//
{ 
    if (bgw.CancellationPending)//
    {
        e.Cancel = true; //
        return;
    }
    byte[] devver = new byte[128];
    int iReturnReaderStatusCheck = SS_Reader_Version(devver);//
    if (iReturnReaderStatusCheck != 0)//
    {
        bgw.ReportProgress(10, iReturnReaderStatusCheck);//
        Thread.Sleep(TimeSpan.FromSeconds(5));//
        continue;
    }
    int iReturn = SS728M05IDCard.ss_id_ResetID2Card(g_handle);
    if (iReturn != 0)
    { 
        Thread.Sleep(TimeSpan.FromSeconds(1));//
        continue;
    }
    iReturn = SS728M05IDCard.ss_id_read_card(g_handle, 0);
    if (iReturn != 0)
    {
        bgw.ReportProgress(100, "读卡失败");
        Thread.Sleep(TimeSpan.FromSeconds(1));//
        continue;
    }  
    byte[] _Name = new byte[36];
    SS728M05IDCard.ss_id_query_name(g_handle, _Name);
    string name = Encoding.Default.GetString(_Name);
    //
    string addressStr = string.Empty; 
    byte[] address = new byte[128];
    SS728M05IDCard.ss_id_query_address(g_handle, address);
    addressStr = Encoding.Default.GetString(address);  
    //
    byte[] ID = new byte[24];
    SS728M05IDCard.ss_id_query_number(g_handle, ID);
    string cardNo = Encoding.Default.GetString(ID); 
    //
    bgw.ReportProgress(50, new object[] { name, addressStr, cardNo });
    //
    Thread.Sleep(TimeSpan.FromSeconds(3)); //
}

windows api

class SS728M05Comom
{
    [DllImport("SS728M05_SDK.dll")]
    internal static extern int ss_reader_open();
    [DllImport("SS728M05_SDK.dll")]
    internal static extern int ss_reader_close(int ReaderHandle);
    [DllImport("SS728M05_SDK.dll")]
    internal static extern int SS_PBOC_ReadCardNum(int icdev, byte[] CardNum);
    [DllImport("SS728M05_SDK.dll")]
    internal static extern int ss_dev_beep(int icdev, UInt16 _Amount, UInt16 _Msec);
    [DllImport("SS728M05_SDK.dll")]
    internal static extern int SS_Reader_Reset(int ReaderHandle, byte[] ICC_Slot_No, byte[] Response, ref int RespLen);
    [DllImport("SS728M05_SDK.dll")]
    internal static extern int SS_Reader_AutoFindCard(long ReaderHandle);

    [DllImport("SS728M05_SDK.dll")]
    internal static extern int ICC_Reader_Open();
    [DllImport("SS728M05_SDK.dll")]   
    internal static extern int ICC_Reader_Reset(int ReaderHandle, int ICC_Slot_No, byte[] Response, ref int RespLen);
    [DllImport("SS728M05_SDK.dll")]
    internal static extern int ICC_Reader_Application(int ReaderHandle, int ICC_Slot_No, int Length_of_Command_APDU, byte[] Command_APDU, byte[] Response_APDU, ref int RespLen);
}
posted @ 2021-04-08 18:41  马洪彪  阅读(476)  评论(0编辑  收藏  举报