📄 regic.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "RegIC.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmRegIC *FrmRegIC;
HINSTANCE m_hDLL;
//---------------------------------------------------------------------------
__fastcall TFrmRegIC::TFrmRegIC(TComponent* Owner,
AnsiString AIC,
AnsiString AName,
AnsiString APwd1,
AnsiString APur,
AnsiString APwd2)
: TForm(Owner)
{
EdtCard->Text=AIC;
EdtName->Text=AName;
EdtPwd1->Text=APwd1;
EdtPur->Text=APur;
EdtPwd2->Text=APwd2;
}
//---------------------------------------------------------------------------
void __fastcall TFrmRegIC::FormCreate(TObject *Sender)
{
m_hDLL = LoadLibrary("RC500USB.dll");//打开动态库
//取得函数地址
(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");
}
//---------------------------------------------------------------------------
void __fastcall TFrmRegIC::FormShow(TObject *Sender)
{
RC500USB_init();
EdtCard->MaxLength=6;
EdtName->MaxLength=12;
}
//---------------------------------------------------------------------------
void __fastcall TFrmRegIC::BtnOKClick(TObject *Sender)
{
unsigned long snr;
unsigned short type;
unsigned char size;
unsigned char data[16],val[3];
unsigned char szpwd[6]={0xff,0xff,0xff,0xff,0xff,0xff};
AnsiString s1,s2;
this->ModalResult = mrNone;
Result=false;
s1=EdtCard->Text.Trim();
s2=EdtName->Text.Trim();
if (s1.Length()!=6)
{
ShowMessage("卡号长度应该为6位数!");
return;
}
if (s2.Length()>12)
{
ShowMessage("姓名长度过长!");
return;
}
val[0]=s1.SubString(0,2).ToInt();
val[1]=s1.SubString(3,2).ToInt();
val[2]=s1.SubString(5,2).ToInt();
for(int i=0;i!=16;++i)
{
if (i<3)
data[i]=val[i];
else
data[i]=s2.c_str()[i-3];
}
if(RC500USB_request (1,type)!=0) //对读卡器进行操作
{
ShowMessage("感应区内没有卡");
return;
}
if(RC500USB_anticoll(0,snr)!=0) //进行防碰撞选择,成功则返回卡号
{
ShowMessage("防碰撞错误");
return;
}
if(RC500USB_select(snr,size)!=0) //选择卡
{
ShowMessage("选择卡错误");
return;
}
EdtCardNo->Text="0x"+AnsiString::IntToHex(snr,8);
if(RC500USB_authkey(0,szpwd,15)!=0) //验证第五扇区的密钥A
{
ShowMessage("验证错误");
return;
}
if(RC500USB_write(15*4+0,data)!=0) //写入第五扇区第一块的数据
{
ShowMessage("写入数据错误");
return;
}
RC500USB_halt();
Result=true;
this->ModalResult = mrOk;
}
//---------------------------------------------------------------------------
void __fastcall TFrmRegIC::BtnCancelClick(TObject *Sender)
{
Result=false;
this->ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
void __fastcall TFrmRegIC::FormClose(TObject *Sender, TCloseAction &Action)
{
RC500USB_exit();
FreeLibrary(m_hDLL);//释放动态库句柄
}
//---------------------------------------------------------------------------
void __fastcall TFrmRegIC::FormClick(TObject *Sender)
{
unsigned long snr;
unsigned short type;
unsigned char size;
unsigned char data[16];
unsigned char szpwd[6]={0xff,0xff,0xff,0xff,0xff,0xff};
if(RC500USB_request (1,type)!=0) //对读卡器进行操作
{
ShowMessage("感应区内没有卡");
return;
}
if(RC500USB_anticoll(0,snr)!=0) //进行防碰撞选择,成功则返回卡号
{
ShowMessage("防碰撞错误");
return;
}
if(RC500USB_select(snr,size)!=0) //选择卡
{
ShowMessage("选择卡错误");
return;
}
EdtCardNo->Text="0x"+AnsiString::IntToHex(snr,8);
if(RC500USB_authkey(0,szpwd,15)!=0) //验证第五扇区的密钥A
{
ShowMessage("验证错误");
return;
}
if(RC500USB_read(15*4+0,data)!=0) //读取第五扇区第一块的数据
{
ShowMessage("读取数据错误");
return;
}
RC500USB_halt();
EdtCard->Clear();
EdtName->Clear();
AnsiString s1,s2;
for(int i=0;i<16;++i)
{
if (i<3)
s1+=(AnsiString)data[i];
else
s2+=(char)data[i];
}
EdtCard->Text=s1;
EdtName->Text=s2;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -