📄 mbtoic.cpp
字号:
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 + -