?? ic_card.c
字號:
// } memcpy(SendCommand + 10, pstmacdata.trade_no, 2); // memcpy(temp, &trade_no, 2);// for(i = 0; i < 2; i++)// {// SendCommand[10+i] = temp[1-i];// } memset(money1,0x00,sizeof(money1)); Dec2Hex(trademoney,money1); sscanf(money1,"%08X",&money); memset(temp,0x00,sizeof(temp)); memcpy(temp, &money, 4); for(i = 0; i < 4; i++) { printf("%02X", temp[3-i]); SendCommand[12+i] = temp[3-i]; } for(i = 0; i < 1; i++) { SendCommand[16+i] = trade_money[i]; } memset(day1,0x00,sizeof(day1)); Dec2Hex(tradeday,day1); sscanf(day1,"%08X",&day); memset(temp,0x00,sizeof(temp)); memcpy(temp, &day, 4); for(i = 0; i < 4; i++) { printf("%02X", temp[4-i]); SendCommand[17+i] = temp[4-i]; } memset(time1,0x00,sizeof(time1)); Dec2Hex(tradetime,time1); sscanf(time1,"%06X",&time); memset(temp,0x00,sizeof(temp)); memcpy(temp, &time, 3); for(i = 0; i < 3; i++) { printf("%02X", temp[3-i]); SendCommand[21+i] = temp[3-i]; } memcpy(SendCommand+24,pstmacdata.mac_version,1); printf("the mac_version is ....[%02X]....\n",pstmacdata.mac_version[0]); memcpy(SendCommand+25,pstmacdata.arith_no,1); memcpy(SendCommand+26,pstmacdata.consumer_id,8); memcpy(SendCommand+34, pstmacdata.bank_id, 2); memcpy(SendCommand+36,"\xFF\xFF\xFF\xFF\xFF\xFF",6); memcpy(SendCommand+42,pstmacdata.city_id,2); SendCommand[43]=SendCommand[43]|15; memcpy(SendCommand+44,"\xFF\xFF\xFF\xFF\xFF\xFF", 6); sendlen = 50; printf("Send Read Record\n"); ret = SendCmd(SendCommand, sendlen, (unsigned char *)recvbuf, &recvlen); if(recvbuf[1] == 0x61) { sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x1b, 0x00, 0xC0, 0x00, 0x00,recvbuf[2]); SendCmd(SendCommand, 6, (unsigned char *)recvbuf, &recvlen); ptr = recvbuf+1; memset(temp, 0x00, sizeof(temp)); memcpy(temp, ptr, 4); for(i = 0; i < 4; i++) { printf("%02X", temp[i]); sprintf(term_tradeno+i*2, "%02X", temp[i]); } printf("the term_tradeno is [%s]\n",term_tradeno); memset(temp, 0x00, sizeof(temp)); memcpy(temp, ptr+4, 4); for(i = 0; i < 4; i++) { printf("%02X", temp[i]); sprintf(mac1+i*2, "%02X", temp[i]); } printf("the mac1 is [%s]\n",mac1); } printf("-------PsamCreatMac122-------\n"); for(k=0;k<4;k++) printf("%X",pstmacdata.random[k]); printf("\n"); return 0; } //執(zhí)行消費交易int PbocCreditPurchase(unsigned char mode, char *trademoney,char *mac1,char *mac2,char *term_tradeno,stMACDATA *pstmacdata,char *tradeday,char *tradetime){ unsigned char SendCommand[128]; unsigned char recvlen = 0; char recvbuf[256]; int sendlen; unsigned int termtradeno; unsigned int mac; unsigned int time; unsigned int day; char time1[10]; char day1[10]; short ret; char temp[14]; int i,k; char *ptr;/* char term_tradetime[4];// 終端交易計數(shù)器 char tradeday[5]; // 交易日期 char tradetime[5]; // 交易時間 char tac[5]; // TAC*/ if(mode !=0x01 && mode != 0x02) { return -1; } printf("-------PbocCreditPurchase11-------\n"); for(k=0;k<4;k++) printf("%X",*(pstmacdata->random+k)); printf("\n"); memset((char *)SendCommand, 0x00, sizeof(SendCommand)); sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x14, 0x80, 0x54, 0x01, 0x00, 0x0f); sscanf(term_tradeno, "%08X", &termtradeno); sscanf(mac1, "%08X", &mac); memcpy(temp, &termtradeno, 4); for(i = 0; i < 4; i++) { SendCommand[6+i] = temp[3-i]; } memcpy(pstmacdata->term_tradetime, SendCommand+6, 4); memset(day1,0x00,sizeof(day1)); Dec2Hex(tradeday,day1); sscanf(day1,"%08X",&day); memset(temp,0x00,sizeof(temp)); memcpy(temp, &day, 4); for(i = 0; i < 4; i++) { printf("%02X", temp[4-i]); SendCommand[10+i] = temp[4-i]; } memcpy(pstmacdata->tradeday, SendCommand+10, 4); memset(time1,0x00,sizeof(time1)); Dec2Hex(tradetime,time1); sscanf(time1,"%06X",&time); memset(temp,0x00,sizeof(temp)); memcpy(temp, &time, 3); for(i = 0; i < 3; i++) { printf("%02X", temp[3-i]); SendCommand[14+i] = temp[3-i]; } memcpy(pstmacdata->tradetime, SendCommand+14, 3); printf("the mac1 is ....[%s]....\n",mac1); memset(temp,0x00,sizeof(temp)); memcpy(temp, &mac, 4); for(i = 0; i < 4; i++) { SendCommand[17+i] = temp[3-i]; } sendlen = 21; printf("Send Credit for Purchase\n"); ret = SendCmd(SendCommand, sendlen, (unsigned char *)recvbuf, &recvlen); if( ret ) return ret; if(recvbuf[1] == 0x61) { sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x13, 0x00, 0xC0, 0x00, 0x00, recvbuf[2]); SendCmd(SendCommand, 6, (unsigned char *)recvbuf, &recvlen); ptr = recvbuf+1; memset(temp, 0x00, sizeof(temp)); memcpy(pstmacdata->tac, ptr, 4); memcpy(temp, ptr+4, 4); for(i = 0; i < 4; i++) { printf("%02X", temp[i]); sprintf(mac2+i*2, "%02X", temp[i]); } printf("the mac2 is [%s]\n",mac2); return 0; } printf("-------PbocCreditPurchase22-------\n"); for(k=0;k<4;k++) printf("%X",*(pstmacdata->random+k)); printf("\n"); return -1;}//校驗MAC2int PsamVerifyMac2(char *mac2){ unsigned char SendCommand[128]; unsigned char recvlen = 0; char recvbuf[256]; int sendlen; unsigned int temp_mac; char temp[20]; static unsigned char SAM_POWER_DOWN[]={0x19}; int i; short ret; memset((char *)SendCommand, 0x00, sizeof(SendCommand)); sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x1c, 0x80, 0x72, 0x00, 0x00, 0x04); sscanf(mac2, "%08X", &temp_mac); memcpy(temp, &temp_mac, 4); for(i = 0; i < 4; i++) { SendCommand[6+i] = temp[3-i]; } sendlen = 10; printf("Send verify Mac2\n"); ret = SendCmd(SendCommand, sendlen, (unsigned char *)recvbuf, &recvlen); if( ret ) return ret; if(recvbuf[1] == 0x61) { sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x13, 0x00, 0xC0, 0x00, 0x00, recvbuf[2]); SendCmd(SendCommand, 6, (unsigned char *)recvbuf, &recvlen); } SendCmd( SAM_POWER_DOWN, sizeof( SAM_POWER_DOWN ), (unsigned char *)recvbuf, &recvlen) ; return 0;}//讀取后續(xù)文件short PsamReadRecord(char head, short readmode, short sfi, short recno, short reclen, char *recvbuf){ unsigned char recvlen = 0; unsigned char datalen; int sendlen; unsigned char SendCommand[128]; short ret, p2; p2 = ( sfi << 3 ) | readmode; memset((char *)SendCommand, 0x00, sizeof(SendCommand)); sprintf((char *)SendCommand, "%c%c%c%c%c%c", head, 0x00, 0xB2, recno, p2, reclen); sendlen = 6; printf("Send Read Record\n"); ret = SendCmd(SendCommand, sendlen, (unsigned char *)recvbuf, &recvlen); if(recvbuf[1] == 0x6C || recvbuf[1] == 0x61) { datalen = recvbuf[2] & 0XFF; return PsamReadRecord(0x1b, readmode, sfi, recno, datalen, recvbuf); } return 0;}//獲取消費信息 int GetSamInfo(char *recvbuf, stMACDATA *pstmacdata){ int i,k; char startday[10], endday[10]; char temp[50]; char *ptr; printf("-------GetSamInfo11-------\n"); for(k=0;k<4;k++) printf("%X",*(pstmacdata->random+k)); printf("\n"); memset(temp, 0x00, sizeof(temp)); memset(startday, 0x00, sizeof(startday)); memset(endday, 0x00, sizeof(endday)); if(recvbuf[0] != 0x00) return -1; if(recvbuf[1] != 0x6f) // FCI 模板 return -2; printf("FCI:[%02X]\n", recvbuf[2]); if(recvbuf[3] != 0x84) // DF 名 return -3; memcpy(temp, recvbuf+5, recvbuf[4]); printf("DF name:\n"); for(i = 0; i < recvbuf[4]; i++) { printf("%02X ", temp[i]); } printf("\n"); ptr = recvbuf + recvbuf[4] + 5; if(ptr[0] != 0xa5) // FCI 專用數(shù)據(jù) return -4; printf("FCI Special Data:[%02X]\n", ptr[1]); ptr += 2; if(ptr[0] == 0x9f && ptr[1] == 0x0c)// 發(fā)送方自定義數(shù)據(jù) FCI { printf("Sender self define fci:[%02x]\n", ptr[2]); } else return -5; ptr +=3; memcpy(pstmacdata->mac_index,ptr,1); ptr += 11; printf("-------GetSamInfo22-------\n"); for(k=0;k<4;k++) printf("%X",*(pstmacdata->random+k)); printf("\n"); return 0;}int PbocInitForLoad(unsigned char mode, char *trademoney,stMACDATA *pstmacdata){ unsigned char SendCommand[128]; unsigned char recvlen = 0; char recvbuf[256]; int sendlen; short ret; char *ptr; char temp[50]; int i; char money1[20]; unsigned int money; if(mode !=0x01 && mode != 0x02) { return -1; } memset((char *)SendCommand, 0x00, sizeof(SendCommand)); sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x14, 0x80, 0x50, 0x00, mode, 0x0b); memcpy(SendCommand+6,pstmacdata->mac_index,1); //printf("the trade money is [%s]\n",trademoney); Dec2Hex(trademoney,money1); sscanf(money1,"%08X",&money); memcpy(temp, &money, 4); for(i = 0; i < 4; i++) { printf("%02X", temp[3-i]); SendCommand[7+i] = temp[3-i]; } memcpy(pstmacdata->amount, SendCommand+7, 4); memcpy(SendCommand+11,pstmacdata->term_no,6); sendlen = 17; printf("Send Initialize for Load\n"); ret = SendCmd(SendCommand, sendlen, (unsigned char *)recvbuf, &recvlen); if( ret ) return ret; if(recvbuf[1] == 0x61) { sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x13, 0x00, 0xC0, 0x00, 0x00, recvbuf[2]); SendCmd(SendCommand, 6, (unsigned char *)recvbuf, &recvlen); ptr = recvbuf+1; memset(temp, 0x00, sizeof(temp)); memcpy(temp, ptr, 4); memcpy(pstmacdata->balance, temp, 4); // ED或EP余額/* printf("balance: "); for(i = 0; i < 4; i++) { printf("%02x ", pstmacdata->balance[i]); }*/ memcpy(pstmacdata->trade_no, ptr+4, 2); // ED或EP聯(lián)機交易序號/* printf("\ntrade_no: "); for(i = 0; i < 2; i++) { printf("%02x ", pstmacdata->trade_no[i]); }*/ memcpy(pstmacdata->mac_version, ptr+6, 1);/* printf("\nmac_version: "); for(i = 0; i < 1; i++) { printf("%02x ", pstmacdata->mac_version[i]); }*/ memcpy(pstmacdata->arith_no, ptr+7, 1);/* printf("\narith_no: "); for(i = 0; i < 1; i++) { printf("%02x ", pstmacdata->arith_no[i]); }*/ memcpy(pstmacdata->random, ptr+8, 4);/* printf("\nrandom: "); for(i = 0; i < 4; i++) { printf("%02x ", pstmacdata->random[i]); }*/ memcpy(pstmacdata->mac1, ptr+12, 4);/* printf("\nmac1: "); for(i = 0; i < 4; i++) { printf("%02x ", pstmacdata->mac1[i]); }*/ } return 0;} int PbocCreditForLoad(unsigned char mode, char *tradeday,char *tradetime,char *mac2){ unsigned char SendCommand[128]; unsigned char recvlen = 0; char recvbuf[256]; int sendlen; short ret;// unsigned long mac;// unsigned long time;// unsigned long day;// char time1[10];// char day1[10];// char temp[14];// int i;// char *ptr; if(mode !=0x01 && mode != 0x02) { return -1; } memset((char *)SendCommand, 0x00, sizeof(SendCommand)); sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x14, 0x80, 0x52, 0x00, 0x00, 0x0b); memcpy(SendCommand+6, tradeday, 4); memcpy(SendCommand+10, tradetime, 3); memcpy(SendCommand+13, mac2, 4);// memset(day1,0x00,sizeof(day1));// Dec2Hex(tradeday,day1);// sscanf(tradeday,"%08X",&day);// memset(temp,0x00,sizeof(temp));// memcpy(temp, &day, 4);// printf("tradeday[ ");// for(i = 0; i < 4; i++)// {// printf("%02X", temp[4-i]);// SendCommand[6+i] = temp[4-i];// }// printf("]\ntradetime[");// memset(time1,0x00,sizeof(time1));// Dec2Hex(tradetime,time1);// sscanf(tradetime,"%06X",&time);// memset(temp,0x00,sizeof(temp));// memcpy(temp, &time, 3); // for(i = 0; i < 3; i++)// {// printf("%02X", temp[3-i]);// SendCommand[10+i] = temp[3-i];// }// printf("]\n");// sscanf(mac2, "%08X", &mac);// memset(temp,0x00,sizeof(temp));// memcpy(temp, &mac, 4); // for(i = 0; i < 4; i++)// {// SendCommand[13+i] = temp[3-i];// } sendlen = 17; printf("Send Credit for Load\n"); ret = SendCmd(SendCommand, sendlen, (unsigned char *)recvbuf, &recvlen); if( ret ) return ret; if(recvbuf[1] == 0x61) { sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x13, 0x00, 0xC0, 0x00, 0x00, recvbuf[2]); SendCmd(SendCommand, 6, (unsigned char *)recvbuf, &recvlen); } return 0;} //返回0表示處理正常,返回-1表示超過處理長度int Dec2Hex(char *dec,char *hex){ long int i; //用于存放將字符串轉(zhuǎn)成的整數(shù) int j; //存放臨時左移的4位數(shù)值 int k; //用于記錄當前存放的16進制位數(shù) char ch; //當前的16進制字符 char tmphex[ARRLENGTH]; k = ARRLENGTH-1; //從后向前填寫.第20個字符作為字符串結(jié)束符號 memset(tmphex,0,ARRLENGTH); i = atoi(dec);// printf("原始十進制數(shù)據(jù):%ld\n",i); while(1) { if(i>15) { k = k-1; //先執(zhí)行減1,處理邏輯更容易 if(k==0 && i>0) break; //超長 j = i % 16; i = i / 16; ch = Dec2HexChar(j); //取得當前字符的16進制形式// printf("當前字符:%d %d %c\n",i,j,ch); tmphex[k] = ch; //將字符放置到正確位置 } else { //最后一個16進制 if(i==0) return k; k = k-1; ch = Dec2HexChar(i); tmphex[k] = ch; break; } } // printf("轉(zhuǎn)換后的十六進制數(shù)據(jù):%s k=%d\n",tmphex+k,k); memcpy(hex,tmphex+k,ARRLENGTH-k-1); return k;}int Dec2HexChar(int j){ switch(j) { case 0: return '0'; break; case 1: return '1'; break; case 2: return '2'; break; case 3: return '3'; break; case 4: return '4'; break; case 5: return '5'; break; case 6: return '6'; break; case 7: return '7'; break; case 8: return '8'; break; case 9: return '9'; break; case 10: return 'A'; break; case 11: return 'B'; break; case 12: return 'C'; break; case 13: return 'D'; break; case 14: return 'E'; break; case 15: return 'F'; break; } return 0;}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -