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

📄 testrfcarddlg.cpp

📁 详细的RF非接触卡测试源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	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 + -