⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mur100.cpp

📁 自己编写的一个IC卡读卡工具,用于读取卡内资料.
💻 CPP
字号:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "MUR100.h"
#include <vcl.h>
#include <StrUtils.hpp>

#pragma package(smart_init)
//---------------------------------------------------------------------------

HINSTANCE m_hDLL;

unsigned long snr;
unsigned short type;
unsigned char size;
unsigned char data[16];
unsigned char szpwd[6]={0xff,0xff,0xff,0xff,0xff,0xff};

TMUR100::TMUR100()
{
    m_hDLL = LoadLibrary("RC500USB.dll");//打开动态库

    if (m_hDLL==NULL)
    {
        ShowMessage("动态库加载失败!");
        return;
    }

    //取得函数地址
    (FARPROC &)RC500USB_init = GetProcAddress(m_hDLL,"RC500USB_init");
    (FARPROC &)RC500USB_exit = GetProcAddress(m_hDLL,"RC500USB_exit");

    (FARPROC &)RC500USB_request = GetProcAddress(m_hDLL,"RC500USB_request");
    (FARPROC &)RC500USB_anticoll = GetProcAddress(m_hDLL,"RC500USB_anticoll");
    (FARPROC &)RC500USB_anticoll2 = GetProcAddress(m_hDLL,"RC500USB_anticoll2");
    (FARPROC &)RC500USB_select = GetProcAddress(m_hDLL,"RC500USB_select");
    (FARPROC &)RC500USB_authentication = GetProcAddress(m_hDLL,"RC500USB_authentication");
    (FARPROC &)RC500USB_authentication2 = GetProcAddress(m_hDLL,"RC500USB_authentication2");
    (FARPROC &)RC500USB_authkey = GetProcAddress(m_hDLL,"RC500USB_authkey");
    (FARPROC &)RC500USB_halt = GetProcAddress(m_hDLL,"RC500USB_halt");
    (FARPROC &)RC500USB_read = GetProcAddress(m_hDLL,"RC500USB_read");
    (FARPROC &)RC500USB_write = GetProcAddress(m_hDLL,"RC500USB_write");
    (FARPROC &)RC500USB_writeval = GetProcAddress(m_hDLL,"RC500USB_writeval");
    (FARPROC &)RC500USB_readval = GetProcAddress(m_hDLL,"RC500USB_readval");
    (FARPROC &)RC500USB_value = GetProcAddress(m_hDLL,"RC500USB_value");
    (FARPROC &)RC500USB_load_key = GetProcAddress(m_hDLL,"RC500USB_load_key");
    (FARPROC &)RC500USB_reset = GetProcAddress(m_hDLL,"RC500USB_reset");
    (FARPROC &)RC500USB_close = GetProcAddress(m_hDLL,"RC500USB_close");
    (FARPROC &)RC500USB_config = GetProcAddress(m_hDLL,"RC500USB_config");
    (FARPROC &)RC500USB_get_info = GetProcAddress(m_hDLL,"RC500USB_get_info");
    (FARPROC &)RC500USB_set_control_bit = GetProcAddress(m_hDLL,"RC500USB_set_control_bit");
    (FARPROC &)RC500USB_clr_control_bit = GetProcAddress(m_hDLL,"RC500USB_clr_control_bit");
    (FARPROC &)RC500USB_buzzer = GetProcAddress(m_hDLL,"RC500USB_buzzer");
    (FARPROC &)RC500USB_read_E2 = GetProcAddress(m_hDLL,"RC500USB_read_E2");
    (FARPROC &)RC500USB_write_E2 = GetProcAddress(m_hDLL,"RC500USB_write_E2");



}
TMUR100::~TMUR100()
{
    FreeLibrary(m_hDLL);//释放动态库句柄
}

bool TMUR100::init()
{
    unsigned char c;
    c=RC500USB_init();
    if ((int)c==255)
    {
        ShowMessage("连接失败");
        return false;
    }
    return true;

}

TMUR100::exit()
{
    RC500USB_exit();
}

AnsiString TMUR100::GetCardNo()
{
    if(RC500USB_request (1,type)!=0)
        if(RC500USB_request (1,type)!=0)
            if(RC500USB_request (1,type)!=0) 		//对读卡器进行操作
    {

        ShowMessage("感应区内没有卡");
        return "";
    }

	if(RC500USB_anticoll(0,snr)!=0)			//进行防碰撞选择,成功则返回卡号
    {
        ShowMessage("防碰撞错误");
        return "";
    }

	if(RC500USB_select(snr,size)!=0)		//选择卡
    {
        ShowMessage("选择卡错误");
        return "";
    }

    return "0x"+AnsiString::IntToHex(snr,8);
}

bool TMUR100::ReadCard(int AFan,int ABlock,char *data)
{
    if (GetCardNo()=="") return false;

    int iFan(0),iBlock(0);
    iFan = AFan ;
    iBlock = ABlock ;

    if(RC500USB_authkey(0,szpwd,iFan)!=0)
    {
        ShowMessage("验证错误");
        return false;
    }

    if(RC500USB_read(iFan*4+iBlock,data)!=0)
    {
        ShowMessage("读取数据错误");
        return false;
    }

    RC500USB_halt();    //挂起
    return true;
}

bool TMUR100::WriteCard(int AFan,int ABlock,char *data)
{

    if (GetCardNo()=="") return false;

    int iFan(0),iBlock(0);
    iFan = AFan ;
    iBlock = ABlock;

    if(RC500USB_authkey(0,szpwd,iFan)!=0)
    {
        ShowMessage("验证错误");
        return false;
    }

    if(RC500USB_write(iFan*4+iBlock,data)!=0)
    {
        ShowMessage("写入数据错误");
        return false;
    }

    RC500USB_halt();    //挂起
    return true;

}


bool TMUR100::ReadInfo(AnsiString &ACode,AnsiString &AName)
{
    unsigned char data[16]={'\0'};
    if (!ReadCard(15,0,data)) return false;

    AnsiString s1,s2;
    for(int i=0;i<16;++i)
    {
        if (i<3)
        {
//            if (int(data[i])<10)
//                s1+="0"+(AnsiString)data[i];
//            else
                s1+=IntToHex((int)data[i],2);
        }
        else
        {
            if (data[i]=='\0') break;
            s2+=(char)data[i];
        }
    }

    //ACode=IntToStr(StrToInt(s1));
    ACode=s1;
    AName=s2;

    return true;
}

bool TMUR100::WriteInfo(AnsiString ACode,AnsiString AName)
{

    if (AName.Trim().Length()>8 || ACode.ToInt()>16777215)
    {
        ShowMessage("员工卡号过大!");
        return false;
    }
    if (AName.Trim().Length()>12)
    {
        ShowMessage("员工姓名过长!");
        return false;
    }        

    unsigned char data[16]={'\0'};
    unsigned char val[3];
    unsigned char tmp;
    AnsiString s1,s2;

    s1=AnsiString::IntToHex(StrToInt(ACode),6);
    s2=AName;

    val[0]=StrToInt("0x"+s1.SubString(0,2));
    val[1]=StrToInt("0x"+s1.SubString(3,2));
    val[2]=StrToInt("0x"+s1.SubString(5,2));

    for(int i=0;i!=16;++i)
    {
        if (i<3)
            data[i]=val[i];
        else
        {
            tmp=s2.c_str()[i-3];
            data[i]=tmp;
            if (tmp == '\0') break;
        }
    }

    if (!WriteCard(15,0,data)) return false;

    return true;
}

bool TMUR100::ReadVal(int AFan,int ABlock,long &AValue)
{
    if (GetCardNo()=="") return false;

    int iFan(0),iBlock(0);
    long lValue;
    iFan = AFan ;
    iBlock = ABlock ;

    if(RC500USB_authkey(0,szpwd,iFan)!=0)
    {
        ShowMessage("验证错误");
        return false;
    }

    if(RC500USB_readval(iFan*4+iBlock,lValue)!=0)
    {
        ShowMessage("读取数据错误");
        return false;
    }

    RC500USB_halt();    //挂起

    AValue=lValue;
    return true;

}

bool TMUR100::WriteVal(int AFan,int ABlock,long AValue)
{
    if (GetCardNo()=="") return false;

    int iFan(0),iBlock(0);
    long lValue;
    iFan = AFan ;
    iBlock = ABlock;
    lValue = AValue;

    if(RC500USB_authkey(0,szpwd,iFan)!=0)
    {
        ShowMessage("验证错误");
        return false;
    }

    if(RC500USB_writeval(iFan*4+iBlock,lValue)!=0)
    {
        ShowMessage("写入数据错误");
        return false;
    }

    RC500USB_halt();    //挂起
    return true;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -