📄 testrfcarddlg.cpp
字号:
CComboBox *pComboList;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_SEX);
//提取性别
int nSexIndex = pComboList->GetCurSel();
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_NATION);
//提取民族
int nNationIndex = pComboList->GetCurSel();
pszCardData[16] = nSexIndex;pszCardData[16] = pszCardData[16]<<6;
pszCardData[16] += nNationIndex;
//提取生日 2006年5月1日
CDateTimeCtrl *pDateTime;
pDateTime = (CDateTimeCtrl *)GetDlgItem(IDC_DATETIMEPICKER1);
pDateTime->SetFormat("yyyMMdd");
GetDlgItem(IDC_DATETIMEPICKER1)->GetWindowText(pszDisplay,64);
pDateTime->SetFormat("yyy年MM月dd日");
memset(pszTemp,0x00,32);
//year
memcpy(pszTemp,pszDisplay,4);
//month
memcpy(pszTemp+4,pszDisplay+4,2);
//day
memcpy(pszTemp+6,pszDisplay+6,2);
//压缩日期成BCD格式
StringToHex(pszTemp,pszCardData+17);
//准备身份证号
GetDlgItem(IDC_EDIT_ID)->GetWindowText(pszDisplay,64);
int nLength = strlen(pszDisplay);
if((18 != nLength)&&(19 != nLength))
{
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("身份证号码有误!");
return;
}
pszDisplay[18] = 0;
StringToHex(pszDisplay,pszCardData+21);
memset(pszDisplay,0x00,64);
GetDlgItem(IDC_EDIT_ID)->GetWindowText(pszDisplay,64);
pszCardData[29] = pszDisplay[16];
pszCardData[30] = pszDisplay[17];
pszCardData[31] = pszDisplay[18];
//取卡号
memset(pszDisplay,0x00,64);
GetDlgItem(IDC_EDIT_CARDID)->GetWindowText(pszDisplay,64);
nLength = strlen(pszDisplay);
if(9 != nLength)
{
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("卡号长度有误!");
return;
}
pszDisplay[9] = 'f';
StringToHex(pszDisplay,pszCardData+32);
//取邮编
memset(pszDisplay,0x00,64);
GetDlgItem(IDC_EDIT_MAILCODE)->GetWindowText(pszDisplay,64);
StringToHex(pszDisplay,pszCardData+37);
//取电话号码
memset(pszDisplay,0x00,64);
GetDlgItem(IDC_EDIT_PHONE)->GetWindowText(pszDisplay,64);
nLength = strlen(pszDisplay);
memset(pszTemp,0xff,64);
memcpy(pszTemp,pszDisplay,nLength);
pszTemp[16] = 0;
StringToHex(pszTemp,pszCardData+40);
int nIndex,nPort,nBaud;
//CComboBox *pComboList;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_PORT);
nPort = pComboList->GetCurSel()+1;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_BAUD);
nIndex = pComboList->GetCurSel();
switch(nIndex)
{
case 0 : nBaud = 9600;break;
case 1 : nBaud = 19200;break;
case 2 : nBaud = 57600;break;
case 3 : nBaud = 115200;break;
}
handlePort = SSI_OpenRFReader(nPort,nBaud);
SSI_BeepReader(handlePort);
//SSI_LedReader(handlePort,1,1);
memset(pszData,0x00,64);
nResult = SSI_QueryRFCard(handlePort,0x52,pszData);
if(pszData[1]&0x01)
sprintf(pszDisplay,"Mifare Light ATQ:%02x%02x;卡号:%02x%02x%02x%02x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if(pszData[1]&0x04)
sprintf(pszDisplay,"Mifare Ultra Light ATQ:%02x%02x;卡号:%02x%02x%02x%02x%02x%02x%02x",
pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7],pszData[8],pszData[9],pszData[10]);
if(pszData[1]&0x08)
sprintf(pszDisplay,"Mifare Standard ATQ:%02x%02x;卡号:%x%x%x%x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if(pszData[1]&0x10)
sprintf(pszDisplay,"Mifare Plus ATQ:%02x%02x;卡号:%x%x%x%x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if((0x00 == pszData[2])&&(0x00 == pszData[3])&&(0x00 == pszData[4])&&(0x00 == pszData[5]))
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("没有卡片!");
return;
}
else
{
//保存卡号
memcpy(g_pszASN,pszData+4,4);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(pszDisplay);
}
//开始验证卡片密钥 A密钥
memset(pszData,0xff,6);
nResult = SSI_AuthenRFCard(handlePort,0x60,0,pszData);
if(nResult)
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥失败!");
return;
}
else
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥成功!");
//开始写卡
nResult =SSI_WriteRFCard(handlePort,0,1,pszCardData);
nResult =SSI_WriteRFCard(handlePort,0,2,pszCardData+16);
if(0x00 != nResult)
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("写卡失败!");
return;
}
else
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("写卡成功!");
//准备认证1扇区
SSI_QueryRFCard(handlePort,0x52,pszData);
//开始验证卡片密钥 A密钥
memset(pszData,0xff,6);
nResult = SSI_AuthenRFCard(handlePort,0x60,1,pszData);
if(nResult)
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥失败!");
return;
}
else
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥成功!");
nResult =SSI_WriteRFCard(handlePort,1,0,pszCardData+32);
if(0x00 != nResult)
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("写卡失败!");
return;
}
else
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("写卡成功!");
//设置初始化金额为0
memset(pszData,0x00,64);
pszData[4] = ~pszData[0];pszData[5] = ~pszData[1];
pszData[6] = ~pszData[2];pszData[7] = ~pszData[3];
nResult = 1;
pszData[12] = nResult;pszData[13] = ~nResult;
pszData[14] = nResult;pszData[15] = ~nResult;
nResult = SSI_WriteRFCard(handlePort,1,1,pszData);
//设置备份块的金额
memset(pszData,0x00,64);
pszData[4] = ~pszData[0];pszData[5] = ~pszData[1];
pszData[6] = ~pszData[2];pszData[7] = ~pszData[3];
nResult = 2;
pszData[12] = nResult;pszData[13] = ~nResult;
pszData[14] = nResult;pszData[15] = ~nResult;
nResult = SSI_WriteRFCard(handlePort,1,2,pszData);
if(0 == nResult)
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("初始化值成功!");
else
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("初始化值失败!");
return;
}
SSI_CloseRFReader(handlePort);
}
void CTestRFCardDlg::OnButtonIncrment()
{
char pszDisplay[128];
unsigned char pszData[64];
unsigned char nResult;
// TODO: Add extra validation here
HANDLE handlePort;
int nIndex,nPort,nBaud;
CComboBox *pComboList;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_PORT);
nPort = pComboList->GetCurSel()+1;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_BAUD);
nIndex = pComboList->GetCurSel();
switch(nIndex)
{
case 0 : nBaud = 9600;break;
case 1 : nBaud = 19200;break;
case 2 : nBaud = 57600;break;
case 3 : nBaud = 115200;break;
}
handlePort = SSI_OpenRFReader(nPort,nBaud);
//SSI_BeepReader(handlePort);
//SSI_LedReader(handlePort,1,1);
memset(pszData,0x00,64);
nResult = SSI_QueryRFCard(handlePort,0x52,pszData);
if(pszData[1]&0x01)
sprintf(pszDisplay,"Mifare Light ATQ:%02x%02x;卡号:%02x%02x%02x%02x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if(pszData[1]&0x04)
sprintf(pszDisplay,"Mifare Ultra Light ATQ:%02x%02x;卡号:%02x%02x%02x%02x%02x%02x%02x",
pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7],pszData[8],pszData[9],pszData[10]);
if(pszData[1]&0x08)
sprintf(pszDisplay,"Mifare Standard ATQ:%02x%02x;卡号:%x%x%x%x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if(pszData[1]&0x10)
sprintf(pszDisplay,"Mifare Plus ATQ:%02x%02x;卡号:%x%x%x%x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if((0x00 == pszData[2])&&(0x00 == pszData[3])&&(0x00 == pszData[4])&&(0x00 == pszData[5]))
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("没有卡片!");
return;
}
else
{
//保存卡号
memcpy(g_pszASN,pszData+4,4);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(pszDisplay);
}
//开始验证卡片密钥 A密钥
memset(pszData,0xff,6);
nResult = SSI_AuthenRFCard(handlePort,0x60,1,pszData);
if(nResult)
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥失败!");
return;
}
else
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥成功!");
memset(pszData,0x00,64);
CDataDialog dlgData(this);
if(IDOK == dlgData.DoModal())
{
//交易金额
pszData[0] = (dlgData.m_nMoney/(256*256*256))%256;
pszData[1] = (dlgData.m_nMoney/(256*256))%256;
pszData[2] = (dlgData.m_nMoney/256)%256;
pszData[3] = dlgData.m_nMoney%256;
}
else
{
return;
}
nResult = SSI_IncrmentRFValue(handlePort,1,1,pszData);
if(0 == nResult)
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("卡充值成功!");
else
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("卡充值失败!");
return;
}
SSI_CloseRFReader(handlePort);
}
void CTestRFCardDlg::OnButtonDecrment()
{
char pszDisplay[128];
unsigned char pszData[64];
unsigned char nResult;
// TODO: Add extra validation here
HANDLE handlePort;
int nIndex,nPort,nBaud;
CComboBox *pComboList;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_PORT);
nPort = pComboList->GetCurSel()+1;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_BAUD);
nIndex = pComboList->GetCurSel();
switch(nIndex)
{
case 0 : nBaud = 9600;break;
case 1 : nBaud = 19200;break;
case 2 : nBaud = 57600;break;
case 3 : nBaud = 115200;break;
}
handlePort = SSI_OpenRFReader(nPort,nBaud);
SSI_BeepReader(handlePort);
//SSI_LedReader(handlePort,1,1);
memset(pszData,0x00,64);
nResult = SSI_QueryRFCard(handlePort,0x52,pszData);
if(pszData[1]&0x01)
sprintf(pszDisplay,"Mifare Light ATQ:%02x%02x;卡号:%02x%02x%02x%02x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if(pszData[1]&0x04)
sprintf(pszDisplay,"Mifare Ultra Light ATQ:%02x%02x;卡号:%02x%02x%02x%02x%02x%02x%02x",
pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7],pszData[8],pszData[9],pszData[10]);
if(pszData[1]&0x08)
sprintf(pszDisplay,"Mifare Standard ATQ:%02x%02x;卡号:%x%x%x%x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if(pszData[1]&0x10)
sprintf(pszDisplay,"Mifare Plus ATQ:%02x%02x;卡号:%x%x%x%x",pszData[2],pszData[3],pszData[4],pszData[5],pszData[6],pszData[7]);
if((0x00 == pszData[2])&&(0x00 == pszData[3])&&(0x00 == pszData[4])&&(0x00 == pszData[5]))
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("没有卡片!");
return;
}
else
{
//保存卡号
memcpy(g_pszASN,pszData+4,4);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(pszDisplay);
}
//开始验证卡片密钥 A密钥
memset(pszData,0xff,6);
nResult = SSI_AuthenRFCard(handlePort,0x60,1,pszData);
if(nResult)
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥失败!");
return;
}
else
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("认证密钥成功!");
memset(pszData,0x00,64);
CDataDialog dlgData(this);
if(IDOK == dlgData.DoModal())
{
//交易金额
pszData[0] = (dlgData.m_nMoney/(256*256*256))%256;
pszData[1] = (dlgData.m_nMoney/(256*256))%256;
pszData[2] = (dlgData.m_nMoney/256)%256;
pszData[3] = dlgData.m_nMoney%256;
}
else
{
return;
}
nResult = SSI_DecrmentRFValue(handlePort,1,1,pszData);
if(0 == nResult)
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("卡消费成功!");
else
{
SSI_CloseRFReader(handlePort);
GetDlgItem(IDC_STATIC_STATUS)->SetWindowText("卡消费失败!");
return;
}
SSI_CloseRFReader(handlePort);
}
void CTestRFCardDlg::OnButtonReset()
{
HANDLE handlePort;
int nIndex,nPort,nBaud;
CComboBox *pComboList;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_PORT);
nPort = pComboList->GetCurSel()+1;
pComboList = (CComboBox *)GetDlgItem(IDC_COMBO_BAUD);
nIndex = pComboList->GetCurSel();
switch(nIndex)
{
case 0 : nBaud = 9600;break;
case 1 : nBaud = 19200;break;
case 2 : nBaud = 57600;break;
case 3 : nBaud = 115200;break;
}
handlePort = SSI_OpenRFReader(nPort,nBaud);
SSI_ResetRFDevice(handlePort);
SSI_CloseRFReader(handlePort);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -