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

📄 mbtoic.cpp

📁 北京航空航天大学指纹识别系统源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MbtoIC.cpp: implementation of the CMbtoIC class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "FingerDemo.h"

#include "Infbuf.h"
#include "Command.h"
#include "part3.h"
#include "reader.h"

#include "MbtoIC.h"
#include "Samfkq_b.h"		//extern dll

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

extern CFingerDemoApp theApp;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMbtoIC::CMbtoIC()
{
	hCom = theApp.g_hCom;
}

CMbtoIC::~CMbtoIC()
{

}

//把指纹模板从IC卡中读入到模板缓冲区
//return value: 0-fail; 1-success
unsigned char CMbtoIC::ReadBinarytoMb (int length,unsigned char byte_mb[])
{
	CInfBuf*  pCmdInf = new CInfBuf;
//	CInfBuf*  pTmpInf = 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
	//把指纹模板读到在byte_mb[]结构中,长度为length
	int i=1;
	int j=0;

	//
	//202 bytes finger template
	int rl = 0;
	while(rl!=length/40){
	pCmdInf->ClearBuffer();			// read 100 bytes in 202 bytes
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

	pCmdInf->AddBufferValue(0x00); //head
	pCmdInf->AddBufferValue(0xB0);
	pCmdInf->AddBufferValue(0x81); //SFI=01  *********************
	pCmdInf->AddBufferValue(rl*40); //OFFSET=00
	pCmdInf->AddBufferValue(40); //len=100

	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;
	}	
	for(i=0;i<40;i++)
		byte_mb[rl*40+i] = resbuf[2+i];
	rl++;
	} //while loop

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

	pCmdInf->AddBufferValue(0x00); //head
	pCmdInf->AddBufferValue(0xB0);
	pCmdInf->AddBufferValue(0x81); //SFI=01  *********************
	pCmdInf->AddBufferValue(rl*40); //OFFSET=100
	pCmdInf->AddBufferValue(length%40); //len

	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;
	}	
	for(i=0;i<length%40;i++)
		byte_mb[rl*40+i] = resbuf[2+i];
	} //if structure

	return 1;
}

//把指纹模板写入IC卡中
//return value: 0-fail; 1-success
unsigned char CMbtoIC::WriteBinarytoIC (int length,unsigned char byte_mb[])
{
	CInfBuf*  pCmdInf = new CInfBuf;
//	CInfBuf*  pTmpInf = 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
	pCommand->CosCommand(1,pCmdInf);
	
	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;
	}

	//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 0;
	}

	//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
	pCommand->CosCommand(1,pCmdInf);
	
	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;
	}


	//create binary file(00 01) 240 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(0x01); //*********************
	pCmdInf->AddBufferValue(0x00); //file size 240 byte**************
	pCmdInf->AddBufferValue(0xf0);
	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 0;
	}
*/	

	//写入指纹模板
	//指纹模板在byte_mb[]结构中,长度为length
	int j=0;

	//写指纹模板数据
	int wl = 0;
	while(wl!=length/40){
	pCmdInf->ClearBuffer();
	pCmdInf->AddBufferValue(0x0a); //ISO 14443
	pCmdInf->AddBufferValue(0x01);

⌨️ 快捷键说明

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