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

📄 mbtoic.cpp

📁 北京航空航天大学指纹识别系统源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	pCmdInf->AddBufferValue(0x00); //head
	pCmdInf->AddBufferValue(0xd6);
	pCmdInf->AddBufferValue(0x81); //SFI=01 *************
	pCmdInf->AddBufferValue(wl*40); //offset=00
	pCmdInf->AddBufferValue(40); //len
	for(i=0;i<40;i++)
		pCmdInf->AddBufferValue(byte_mb[i+40*wl]);

	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command!");
		return 0;
	}
	wl++;
	}	//while loop

	if(length%40!=0){	//write left bytes in 202 bytes
	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x00); //head
	pCmdInf->AddBufferValue(0xd6);
	pCmdInf->AddBufferValue(0x81); //SFI=01 *************
	pCmdInf->AddBufferValue(wl*40); //offset=00
	pCmdInf->AddBufferValue(length%40); //len
	for(i=0;i<length%40;i++)
		pCmdInf->AddBufferValue(byte_mb[i+40*wl]);

	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command!");
		return 0;
	}
	}	//if structure

	return 1 ;
}


bool CMbtoIC::Issuestudent(unsigned char *byte_info)
{
	CInfBuf*  pCmdInf = new CInfBuf;
	CCommand* pCommand = new CCommand;

	BYTE *hexvalue = new BYTE[255];
	BYTE *resbuf = new BYTE[255];

	unsigned char sw1;
	unsigned char sw2;
	int i;  //返回数据域的实际长度,包括SW1,SW2
	int number;
	BYTE res_len;  //返回数据域的实际长度,包括SW1,SW2

	::SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
/*
	//delete MF before create MF
	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x00); //command head,CLA
	pCmdInf->AddBufferValue(0x77); //INS
	pCmdInf->AddBufferValue(0xB8); //P1
	pCmdInf->AddBufferValue(0x21); //P2
	pCmdInf->AddBufferValue(0x0b); //Lc=30 bytes
	
	pCmdInf->AddBufferValue(0x08); //file type 1
	pCmdInf->AddBufferValue(0x08); //file type 1
	pCmdInf->AddBufferValue(0x00); //file ID 2 bytes
	pCmdInf->AddBufferValue(0x00); 
	pCmdInf->AddBufferValue(0x00); //file size 2 bytes
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x00); //create auth 1
	pCmdInf->AddBufferValue(0x00); //delete auth 1
	pCmdInf->AddBufferValue(0x00); //select auth 1
	pCmdInf->AddBufferValue(0x00); //create auth 1
	pCmdInf->AddBufferValue(0x00); //delete auth 1
	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command.");
		return false;
	}

	//command for create MF
	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x80); //command head,CLA
	pCmdInf->AddBufferValue(0xe0); //INS
	pCmdInf->AddBufferValue(0x00); //P1
	pCmdInf->AddBufferValue(0x00); //P2
	pCmdInf->AddBufferValue(0x16); //Lc=22 bytes
	
	pCmdInf->AddBufferValue(0x01); //file type 1
	pCmdInf->AddBufferValue(0x3f); //file ID 2 bytes
	pCmdInf->AddBufferValue(0x00); 
	pCmdInf->AddBufferValue(0x06); //file size 1024 + 512 bytes *****************
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x0F); //create auth 1
	pCmdInf->AddBufferValue(0x0F); //delete auth 1
	pCmdInf->AddBufferValue(0x0F); //select auth 1
	pCmdInf->AddBufferValue(0x00); //trans code 8 bytes
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x01); //AID 6 bytes
	pCmdInf->AddBufferValue(0x02);
	pCmdInf->AddBufferValue(0x03);
	pCmdInf->AddBufferValue(0x04);
	pCmdInf->AddBufferValue(0x05);
	pCmdInf->AddBufferValue(0x06);
	
	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command!");
		return false;
	}

	//create MF key file(0001)
	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x80); //command head,CLA
	pCmdInf->AddBufferValue(0xe0); //INS
	pCmdInf->AddBufferValue(0x02); //P1
	pCmdInf->AddBufferValue(0x00); //P2
	pCmdInf->AddBufferValue(0x07); //Lc=7

	pCmdInf->AddBufferValue(0x25); //file type=0x25 
	pCmdInf->AddBufferValue(0x00); //file ID 2
	pCmdInf->AddBufferValue(0x01); 
	pCmdInf->AddBufferValue(0x00); //file size 64 bytes
	pCmdInf->AddBufferValue(0x40); 
	pCmdInf->AddBufferValue(0x0F); //read auth 1
	pCmdInf->AddBufferValue(0x0F); //write auth 1
	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command!");
		return false;
	}

	//create binary file(00 02) 64 bytes
	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x80); //command head
	pCmdInf->AddBufferValue(0xe0);
	pCmdInf->AddBufferValue(0x02);
	pCmdInf->AddBufferValue(0x00);
	pCmdInf->AddBufferValue(0x07); //file head 7 

	pCmdInf->AddBufferValue(0x21); //file type=0x21
	pCmdInf->AddBufferValue(0x00); //file ID
	pCmdInf->AddBufferValue(0x02); //*********************
	pCmdInf->AddBufferValue(0x00); //file size 64 byte**************
	pCmdInf->AddBufferValue(0x40);
	pCmdInf->AddBufferValue(0x0f); //read authority
	pCmdInf->AddBufferValue(0x0f); //write authority    

	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command!");
		return false;
	}
*/
	

	//写入学生的基本信息
	//数据在byte_info[]结构中,长度为43字节

	//把指纹模板数据的长度写如到binary的第一个字节
	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x00); //head
	pCmdInf->AddBufferValue(0xd6);
	pCmdInf->AddBufferValue(0x82); //SFI=02 *************
	pCmdInf->AddBufferValue(0x00); //offset=00
	pCmdInf->AddBufferValue(0x2b); //len=43 bytes
	for(i=0;i<43;i++)
		pCmdInf->AddBufferValue(byte_info[i]);

//    pCmdInf->m_KeyType = 1; //single DES
	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command!");
		return false;
	}
	return true;


}

bool CMbtoIC::Readinfo(unsigned char *byte_info)
{
	CInfBuf*  pCmdInf = new CInfBuf;
	CCommand* pCommand = new CCommand;

	BYTE *hexvalue = new BYTE[255];
	BYTE *resbuf = new BYTE[255];

	unsigned char sw1;
	unsigned char sw2;
	int number;
	BYTE res_len;  //返回数据域的实际长度,包括SW1,SW2

	//卡复位后	
	//就可以进行读取binary,一共43字节
	int i;

	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x00); //head
	pCmdInf->AddBufferValue(0xB0);
	pCmdInf->AddBufferValue(0x82); //SFI=02  *********************
	pCmdInf->AddBufferValue(0x00); //OFFSET=00
	pCmdInf->AddBufferValue(0x2b); //len=43bytes

	number = pCmdInf->GetBufferCount();
	for(i=0;i<number;i++)
		hexvalue[i]=pCmdInf->GetBufferValue(i); 
	General_B(hCom,1,hexvalue,number,resbuf,&res_len);

	sw1 = resbuf[res_len-2];
	sw2 = resbuf[res_len-1];
	if(sw1!=0x90||sw2!=0)
	{
		AfxMessageBox("Fail to Execute COS command!");
		return false;
	}
	
	for(i=0;i<43;i++)
	{
		byte_info[i] = resbuf[i+2];
	}
	return true;

}

⌨️ 快捷键说明

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