亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ic_card.c

?? 金融IC卡讀寫器函數
?? C
?? 第 1 頁 / 共 3 頁
字號:
/********************************************************************* *   Designed by xiaohuiyang 2005.06.08    E-mail: yxh2001@21cn.com
  *  *********************************************************************/#include <string.h>#include <stdio.h>#include <stdlib.h>#include "ic_card.h"#include "tl.h"                 //Include Transport Layerchar m_chErrMsg[20];int ICOpenCom(){	if(TL_Open(2, 9600) != NO_ERR)	{		return -1;	}	return 0;}int ICCloseCom(){	TL_Close();	return 0;}int ICPowerOn(){	unsigned char recvbuf[256];	unsigned char cmd[] = "\x12";	unsigned char recvlen = 0;	memset(recvbuf, 0x00, sizeof(recvbuf));	SendCmd(cmd, 1, recvbuf, &recvlen);	if(recvbuf[1] == 0x3B)		return 0;	return -1;}int ICPowerDown(){	unsigned char recvbuf[256];	unsigned char cmd[] = "\x11";	unsigned char recvlen = 0;	memset(recvbuf, 0x00, sizeof(recvbuf));	SendCmd(cmd, 1, recvbuf, &recvlen);	return 0;}int ReadAccount(stMACDATA *pst/*char *account*/){	return PbocSelectPboc(pst/*account*/);}/*=============================================================================//函數名稱: SendICCommand//輸入參數: char *ICSendbuf  : 發送字符串//輸出參數: char *ICRecvbuf :  接收字符串//       char *ICSW      : 判斷符       //返    回: 0--成功;   <0: 失敗//功    能: 發送ic卡命令//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/short SendICCommand(char *ICSendbuf, char *ICRecvbuf, char *ICSW){	int  ret,datalen;	char chLen[3];	ret=SendICC(ICSendbuf, 0, ICRecvbuf, ICSW);	memset(chLen, 0x00, 3);	if(strncmp(ICSW,"61",2)==0)	{		memcpy(chLen,&ICSW[2],2);		sscanf(chLen,"%02X",&datalen);		datalen = datalen&0XFF;		memset(ICSW, '\0', 5);		ret =  PbocGetResponse(ICRecvbuf, datalen, ICSW);	}	return ret;}/*=============================================================================//函數名稱: PbocGetResponse//輸入參數: char *ICSendbuf      : 發送字符串//       unsigned int datalen : 發送字符串長度//輸出參數: char *SW      : 判斷符       //返    回: 0--成功;   <0: 失敗//功    能: 發送ic卡響應命令//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/short PbocGetResponse(char *ICRecvbuf, unsigned int datalen, char *SW){	int    ret;	char   chSend1[128], chLen[3];	stAPDU apdu;	if( datalen<0 || datalen>256 )		return 102;               //102代表數據長度錯	memset( &apdu, '\0', sizeof(stAPDU) );	strcpy(apdu.cla,"00");	strcpy(apdu.ins,"C0");	strcpy(apdu.p1,"00");	strcpy(apdu.p2,"00");	sprintf(apdu.p3, "%02X", datalen);	memset( chSend1, '\0', 128);	sprintf(chSend1,"%s%s%s%s%s%s",apdu.cla,apdu.ins,apdu.p1,apdu.p2,apdu.p3,apdu.data);	ret = SendICCommand(chSend1,ICRecvbuf,SW);	if( ret )		return ret;	ret =CheckSW(SW);	if( ret )		return ret;	memset(chLen,'\0',3);	if(strncmp(SW,"6C",2)==0 || strncmp(SW,"61",2)==0)	{		memcpy(chLen,&SW[2],2);		sscanf(chLen,"%02X",&datalen);		datalen = datalen&0XFF;		return PbocGetResponse(ICRecvbuf, datalen,SW);	}	return 0;}/*=============================================================================//函數名稱: CheckSW//輸入參數: char *pSW      : 判斷字符串//輸出參數:無//返    回: 0--成功;   <0: 失敗//功    能: 檢查ic卡響應//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/short CheckSW(char *pSW){	unsigned int nSW;	memset(m_chErrMsg,'\0',20);	if((strncmp(pSW, "9000", 4)==0 || strncmp(pSW, "61", 2)==0 || strncmp(pSW, "6C", 2)==0 ))	{		return 0;	}  	sscanf(pSW, "%04X", &nSW);	GetICSWErrMsg(nSW);	return nSW;}/*=============================================================================//函數名稱: GetICSWErrMsg//輸入參數: unsigned int SW : 錯誤標志//輸出參數:無//返    回: 0--成功;   <0: 失敗//功    能: 獲取錯誤信息//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/void GetICSWErrMsg(unsigned int SW){	memset(m_chErrMsg,'\0',20);	if( SW==0X6700 )		strcpy(m_chErrMsg,"Lc錯誤!");	else if( SW==0X6901 )		strcpy(m_chErrMsg,"命令不接受!");	else if( SW==0X6982 )		strcpy(m_chErrMsg,"不滿足安全狀態!");	else if( SW==0X6985 )		strcpy(m_chErrMsg,"使用條件不滿足!");	else if( SW==0X6A81 )		strcpy(m_chErrMsg,"不支持此功能!");	else if( SW==0X6A82 )		strcpy(m_chErrMsg,"文件未找到!");	else if( SW==0X6A86 )		strcpy(m_chErrMsg,"參數P1, P2錯誤!");	else if( SW==0X6D00 )		strcpy(m_chErrMsg,"INS錯誤!");	else if( SW==0X6E00 )		strcpy(m_chErrMsg,"CLA錯誤!");	else if( SW==0X9302 )		strcpy(m_chErrMsg,"MAC無效!");	else if( SW==0X9303 )		strcpy(m_chErrMsg,"應用已經永久鎖定!");	else if( SW==0X9401 )		strcpy(m_chErrMsg,"金額不足!");	else if( SW==0X9403 )		strcpy(m_chErrMsg,"密鑰索引不支持!");	else if( SW==0X9406 )		strcpy(m_chErrMsg,"所需的MAC不可用!");	else		strcpy(m_chErrMsg,"系統出錯");}/****************************************************************//* Description : Sends Command to the reader and displays       *//*               answer or error code .                         *//* Input :                                                      *//*               unsigned char *pszCmd -> Command               *//*               unsigned char  ucLgcmd -> Command Length       *//* Output :      None                                           *//* Returns :     Error Code                                     *//* Global Variables : None                                      *//****************************************************************/short int SendCmd( unsigned char *pszCmd, unsigned char ucLgcmd, unsigned char *szRep, unsigned char *ucLgRep){//   unsigned char szRep[ 256 ], ucLgRep ;   short int siRet;//#ifdef MMI   unsigned char ucIndice ;   printf( "\n->" );   /*Display Command*/   for ( ucIndice = 0 ; ucIndice < ucLgcmd ; ucIndice++ )      printf( " %02Xh", pszCmd[ ucIndice ] ) ;//#endif   /*Send the command and retrieves the answer*/   siRet = TL_SendReceive( ucLgcmd, pszCmd, ucLgRep, szRep );   /*If no error occured then display answer*/   if ( siRet == NO_ERR )	{//#ifdef MMI      printf( "\n<-" );      for ( ucIndice = 0 ; ucIndice < *ucLgRep ; ucIndice++ )         printf( " %02Xh", szRep[ ucIndice ] ) ;      printf( "\n" );//#endif			}	else	{      /*dispay error code value*///#ifdef MMI      printf( "\nError occured : %X\n", siRet );//#endif      /*Close port*/      TL_Close() ;      /*Leave application*/      exit( -1 ) ;	}   return ( siRet ) ;}/*=============================================================================//函數名稱: SendICC//輸入參數: char *ICSendbuf : 發送字符串//       int sendlen    : 發送長度//輸出參數:char *ICRecvbuf : 接收字符串//      char *ICSW      :  接收標志//返    回: 0--成功;   <0: 失敗//功    能: 發送IC卡指令//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/int SendICC(char *ICSendbuf, int sendlen, char *ICRecvbuf, char *ICSW){	unsigned char ucLgRep;	SendCmd((unsigned char *)ICSendbuf, sendlen, (unsigned char *)ICRecvbuf, &ucLgRep) ;	return 0;}/*=============================================================================//函數名稱: PbocICSelect//輸入參數: char *file_id : 文件名稱//       int filelen    :文件長度//輸出參數:unsigned char *recvbuf : 接收字符串//返    回: 0--成功;   <0: 失敗//功    能: 文件選擇//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/int PbocICSelect(char *file_id, int filelen, unsigned char *recvbuf){	unsigned char  recvlen = 0;	unsigned char SendCommand[128];	int sendlen;	short  ret;//	int i;	memset((char *)SendCommand, 0x00, sizeof(SendCommand));	sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x14, 0x00, 0xA4, 0x04, 0x00, filelen);	memcpy(SendCommand+6, file_id, filelen);	sendlen = filelen + 6;	ret = SendCmd(SendCommand, sendlen, recvbuf, &recvlen);/*	printf("Pboc IC select:[");	for(i = 0; i < recvlen; i++)	{		printf("%02X ", recvbuf[i]);	} 	printf("]\n");*/	if(recvbuf[1] == 0x61)	{		sprintf((char *)SendCommand, "%c%c%c%c%c%c", 0x13, 0x00, 0xC0, 0x00, 0x00, recvbuf[2]);	   SendCmd(SendCommand, 6, recvbuf, &recvlen);	}	return 0;}/*=============================================================================//函數名稱: PbocSelectPboc//輸入參數: 無//輸出參數:無//返    回: 0--成功;   <0: 失敗//功    能: 金融應用選擇//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/int PbocSelectPboc(stMACDATA *pst/*char *Account*/){	short  ret;	short  sfi;	char   *ptr, tmpfilename[256];	char   chPSE[50];	unsigned char   recvbuf[256];//	unsigned char  datalen;//	char cardno[21];	memset(tmpfilename, 0x00, sizeof(tmpfilename));	memset(recvbuf,'\0',256);	memset(chPSE, '\0', 50);	memcpy(tmpfilename, "1PAY.SYS.DDF01", 14);	strcpy(chPSE, tmpfilename);	PbocICSelect("1PAY.SYS.DDF01", strlen(tmpfilename), recvbuf);//	if( ret )//		return ret;	printf("strstr\n");	ptr = strstr((char *)(recvbuf+1), "\x88\x01");	if(ptr == NULL)		return -1;	ptr += 2;	sfi = ptr[0] & 0XFF;	memset(recvbuf, 0x00, sizeof(recvbuf));/*	for(i = 1; ; i++)	{		printf("Send Read Record\n");		ret = PbocReadRecord(0x14, ABS_RECORD, sfi, i, 0, (char *)recvbuf);		if( ret )			return ret;		printf("start strstr find data ...\n");		ptr = strstr((char *)(recvbuf+1),"\x4F");		if(ptr == NULL)			return -1;		if(strncmp(ptr+2, chPSE, 14) != 0 )			break;	}	printf("come here\n");	datalen = ptr[1] & 0XFF;	memset(tmpfilename, 0x00, sizeof(tmpfilename));	memcpy(tmpfilename, ptr+2, datalen);*/	ret = PbocICSelect("\xD1\x56\x00\x00\x01\x45\x44\x2F\x45\x50\x00\x00\x00\x00\x00\x00", 16, recvbuf);	if( ret )		return ret;	//Unpackage Receive Data//	memset(cardno, 0x00, sizeof(cardno));	GetInfo((char *)recvbuf, pst);	//	ret = PbocReadBinary(0x14, 21, 0, 30, (char *)recvbuf);	return 0;}/*=============================================================================//函數名稱: PbocReadRecord//輸入參數: char head : 發送頭標志//       short readmode: 讀取模式//       short sfi://       short recno:    記錄數//       short reclen:   接收長度//輸出參數:char *recvbuf:    接收數據//返    回: 0--成功;   <0: 失敗//功    能: 讀記錄//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/short PbocReadRecord(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 PbocReadRecord(0x13, readmode, sfi, recno, datalen, recvbuf);	}	return 0;}/*=============================================================================//函數名稱: PbocReadBinary//輸入參數: char head : 發送頭標志//       short sfi://       short offset:   偏移量//       short readlen:  接收長度//輸出參數:char *recvbuf:    接收數據//返    回: 0--成功;   <0: 失敗//功    能: 讀二進制文件//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/short PbocReadBinary(char head, short sfi, short offset, short readlen, char *recvbuf){	short  datalen, ret, p1;	int    sendlen;	unsigned char  recvlen = 0;	unsigned char SendCommand[128];	if( sfi > 30 || (sfi<21 && sfi!=0 ) )		return FALSE;	if( sfi!=0 )		p1 = 0x80 | sfi;	else		p1 = sfi;	memset((char *)SendCommand, 0x00, sizeof(SendCommand));	sprintf((char *)SendCommand, "%c%c%c%c%c%c", head, 0x00, 0xB0, p1, offset, readlen);	sendlen = 6;	printf("Send ReadBinary\n");	ret = SendCmd(SendCommand, sendlen, (unsigned char *)recvbuf, &recvlen);	if(recvbuf[1] == 0x6C || recvbuf[1] == 0x61)	{		datalen = recvbuf[2] & 0XFF;		return PbocReadBinary(0x13, sfi, offset, datalen, recvbuf);	}	return 0;}/*=============================================================================//函數名稱: GetInfo//輸入參數: char *recvbuf: 接收數據//輸出參數:char *cardno : 卡號//返    回: 0--成功;   <0: 失敗//功    能: 獲取返回信息//開發人員: yangxh//修改記錄: 1. 第一次編寫.===============================================================================*/int GetInfo(char *recvbuf, stMACDATA *pst/*char *cardno*/){	int  i;	char startday[10], endday[10];	char temp[50];	char *ptr;	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 專用數據		return -4;//	printf("FCI Special Data:[%02X]\n", ptr[1]);//	ptr = strstr(ptr, "\x9f\x08");      // 應用版本號//	printf("Version NO:[%02x%02x]\n", ptr[2], ptr[3]);//	ptr += 4;	ptr = strstr(ptr, "\x9f\x0c");      // 應用版本號	if(ptr != NULL)// 發送方自定義數據 FCI	{		printf("Sender self define fci:[%02x]\n", ptr[2]);	}	else		return -5;	ptr += 3;	printf("Author card flag:");        // 發卡方標識符	memcpy(pst->bank_id, ptr, 8);	for(i = 0; i < 8; i++)	{		printf("%02x ", ptr[i]);	}	printf("\n");	ptr += 8;	printf("use type:[%02x]\n", ptr[0]); // 應用類型標識	printf("version:[%02X]\n", ptr[1]);  // 發卡方應用版本號	memset(temp, 0x00, sizeof(temp));	memcpy(temp, ptr+2, 10);             // 應用序列號	memcpy(pst->card_no, ptr+2, 10);/*	for(i = 0; i < 10; i++)	{		printf("%02X", temp[i]);		sprintf(cardno+i*2, "%02X", temp[i]);	}	for(i = 0; i < 20; i++)	{		if(cardno[i] == 'F')		{			cardno[i] = '\0';			break;		}	}	printf("card no:[%s]\n", cardno);*/	memset(temp, 0x00, sizeof(temp));	memcpy(temp, ptr+12, 4);              // 應用啟用日期	for(i = 0; i < 4; i++)	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品v日韩精品v韩国精品v| 国产欧美日韩不卡| 久久久久国产精品人| 综合在线观看色| 国产在线不卡视频| 欧美日韩亚洲综合一区二区三区| 久久女同精品一区二区| 亚洲123区在线观看| 成人教育av在线| 久久久精品黄色| 青娱乐精品视频在线| 欧美亚洲日本国产| 亚洲另类在线视频| 不卡av在线免费观看| 国产免费久久精品| 久久9热精品视频| 日韩一级二级三级| 天天爽夜夜爽夜夜爽精品视频| 一本大道av一区二区在线播放 | 国产在线精品一区二区| 在线免费观看日本一区| 中文字幕中文字幕一区| 国产91精品免费| 久久精品水蜜桃av综合天堂| 久久精品国产99久久6| 欧美日韩一区二区三区在线看 | 欧美成人性战久久| 七七婷婷婷婷精品国产| 欧美午夜精品一区二区三区| 一区二区三区在线免费| 91色视频在线| 一区二区三区在线视频观看| 91九色02白丝porn| 亚洲线精品一区二区三区| 欧美在线不卡一区| 天堂在线亚洲视频| 日韩欧美二区三区| 国产一区中文字幕| 国产亚洲精久久久久久| 国产成人免费av在线| 中文字幕电影一区| 99久久久无码国产精品| 亚洲女厕所小便bbb| 欧美三级中文字幕| 日韩福利视频网| 精品久久国产97色综合| 国产经典欧美精品| 亚洲美女免费在线| 67194成人在线观看| 国产精品自在欧美一区| 国产精品免费免费| 欧美视频中文字幕| 久久精品国产久精国产爱| 国产亚洲欧洲一区高清在线观看| 成人丝袜高跟foot| 亚洲国产成人av好男人在线观看| 欧美日韩国产成人在线免费| 美女www一区二区| 国产精品福利一区| 欧美男生操女生| 国产一区二区在线电影| 亚洲欧美日韩综合aⅴ视频| 欧美日韩综合色| 国产一区二区免费看| 亚洲精品视频一区二区| 日韩欧美在线综合网| 成人性生交大片免费看视频在线| 一区二区成人在线观看| 日韩欧美激情一区| 99在线精品免费| 美女任你摸久久| 18欧美亚洲精品| 日韩免费一区二区| 91色婷婷久久久久合中文| 日韩国产欧美一区二区三区| 日本一区二区在线不卡| 91麻豆精品国产91久久久使用方法| 国产成人精品网址| 石原莉奈在线亚洲三区| 中文字幕亚洲欧美在线不卡| 日韩欧美国产综合| 91网站在线播放| 国产在线日韩欧美| 亚洲 欧美综合在线网络| 国产精品人成在线观看免费| 欧美一区二区人人喊爽| 色综合久久天天综合网| 高清视频一区二区| 看片的网站亚洲| 亚洲免费观看在线观看| 日本一区二区三区在线不卡| 日韩欧美你懂的| 欧美日韩精品一区二区三区蜜桃| 成人国产精品免费网站| 国产精品亚洲视频| 精品在线免费视频| 午夜av电影一区| 一级中文字幕一区二区| 国产精品久久国产精麻豆99网站 | 亚洲国产成人自拍| 精品美女一区二区| 日韩一区二区在线观看视频| 日本伦理一区二区| 97久久超碰国产精品| 成人免费高清在线| 粉嫩嫩av羞羞动漫久久久| 久久99精品久久久久| 久久国产精品一区二区| 久草在线在线精品观看| 久久精品国产99国产| 久久99国内精品| 激情综合色丁香一区二区| 久久不见久久见免费视频7| 青草国产精品久久久久久| 日韩黄色在线观看| 日本成人在线不卡视频| 麻豆91精品视频| 韩国视频一区二区| 国产麻豆91精品| 成人午夜视频在线观看| 成人动漫中文字幕| 色综合久久久网| 欧美午夜一区二区三区| 在线播放91灌醉迷j高跟美女| 91精品啪在线观看国产60岁| 日韩欧美二区三区| 国产日本欧美一区二区| 国产精品看片你懂得| 亚洲精选在线视频| 亚洲超碰精品一区二区| 美女视频网站久久| 成人综合婷婷国产精品久久| 99久久综合精品| 欧美色图天堂网| 日韩欧美激情在线| 国产女主播视频一区二区| 亚洲男帅同性gay1069| 亚洲国产精品久久人人爱蜜臀 | 亚洲国产精品久久久久婷婷884 | 成人免费高清在线| 一本到三区不卡视频| 91精品国产免费久久综合| 久久综合九色综合久久久精品综合| 国产亚洲精品免费| 亚洲女人的天堂| 蜜桃视频在线观看一区二区| 成人免费视频国产在线观看| 在线观看日韩毛片| 欧美大片拔萝卜| 国产精品的网站| 日本不卡视频一二三区| 成人精品小蝌蚪| 欧美高清视频一二三区| 中文字幕国产一区二区| 日韩中文字幕区一区有砖一区| 国产高清不卡二三区| 欧美三区在线视频| 日本一区二区高清| 日韩av电影天堂| 91免费小视频| 精品91自产拍在线观看一区| 一区二区不卡在线播放| 国产精华液一区二区三区| 欧美日韩国产区一| 综合中文字幕亚洲| 狠狠狠色丁香婷婷综合久久五月| 欧美伊人久久大香线蕉综合69| 精品va天堂亚洲国产| 香蕉乱码成人久久天堂爱免费| 大白屁股一区二区视频| 日韩一区二区高清| 亚洲一区二区三区四区的| 国产成人综合自拍| 日韩一区二区在线看片| 性感美女久久精品| 一本一本久久a久久精品综合麻豆| 精品国产一区二区三区久久影院 | 亚洲欧洲日产国码二区| 国内精品伊人久久久久av一坑| 日本韩国一区二区| 1000部国产精品成人观看| 国产麻豆精品久久一二三| 7777精品伊人久久久大香线蕉的 | 亚洲永久精品国产| 成人午夜激情视频| 久久影院午夜片一区| 日本最新不卡在线| 欧美日韩高清在线| 亚洲国产另类av| 欧美在线一区二区| 亚洲欧美日韩在线| 成人精品一区二区三区四区| 久久久影视传媒| 国产伦精品一区二区三区免费迷| 欧美一级xxx| 日本欧美一区二区三区乱码| 欧美日本一区二区| 亚洲va欧美va天堂v国产综合| 一本大道av伊人久久综合| 亚洲精品久久7777|