#ifndef __CARD_ASSIST_H #define __CARD_ASSIST_H #pragma once #include "stdafx.h" #include "ICDataElement.h" #include "CardIssuerClass.h" #include "RFICClass.h" #include "../../Module/mod_CardIssuerStand/CardIssuerStand_UserErrorCode.h" #include "../../Module/mod_cardissuerstore/CardIssuerStore_UserErrorCode.h" #include "../../Module/mod_ContactlessCard/ContactlessCard_UserErrorCode.h" #include using namespace std; enum CardReadType { CARD_MACHINE_ISSUER = 0, CARD_MACHINE_RFIC, CARD_MACHINE_ISSUER_RF, CARD_MACHINE_ISSUER_STORE, CARD_MACHINE_ISSUER_STORE_RF }; enum TagVectorType { TAG_VECTOR_IC, TAG_VECTOR_BUS, }; struct FormUnit { int fstSize; int sndSize; char *pFst; char *pSnd; }; //#ifdef __cplusplus //extern "C" { //#endif //#define CARDASSIST_API __declspec(dllexport) const int MAX_TEST_SHOW = 1024; const int MAX_SEND_BUF = 1024; bool IsDoubleByteFlag(BYTE data); bool IsForm(LPBYTE data,int flagLen); int SplitICData(vector& vResult,LPBYTE* origData,int start,int dataLen,int level,int origDataLen); int StrBuf2HexBuf(LPCTSTR strBuf,PBYTE* hexBuf); int HexBuf2StrBuf(PBYTE hexBuf,char** strBuf,DWORD len); int SplitFormString(vector &vResult,const char *pData,int size,char fstP,char sndP); int char2int(char ch); void DbgInfo(CSimpleStringA apiName, long beginTime, long endTime, ErrorCodeEnum errCode, CSimpleStringA msg); void DbgInfo(CSimpleStringA msg); void DbgWarn(CSimpleStringA apiName, long beginTime, long endTime, ErrorCodeEnum errCode, CSimpleStringA msg); void DbgWarn(CSimpleStringA msg); class CCardProcess { public: CCardProcess():m_pARPC(NULL),m_pARC(NULL),m_pScript(NULL),m_pTACReject(NULL),m_pIACOnline(NULL), m_pTACOnline(NULL),m_pIACDefault(NULL),m_pTACDefault(NULL),m_lastErrMsg(""), m_lastApiName("") { m_lastErrCode = Error_Succeed; } ~CCardProcess(); void DataInit(); //0: success //-1£ºContactIC failed //-2£ºActiveICCard failed //-3£ºActiveContactlessICCard failed int DetectIfICCard(CardReadType eType, DeviceBaseClass* pCardX, int& cardType, bool bIssue = false);//cardType:0x41'A',type A; 0x42'B',type B; 0x4d'M',type M //0: success //-1£ºContactIC failed //-2£ºActiveICCard failed //-3£ºActiveContactlessICCard failed //-4£ºICCommand failed //-5£ºRFTypeABCommand failed int DetectAndReadICData(CardReadType eType, DeviceBaseClass* pCardX, CAutoArraypAIDs, int& cardType, bool bIssue = false); bool GetICDataFromCard(CardReadType eType,DeviceBaseClass *pCardX,CAutoArray pAIDs); //int SplitICData(vector& vResult,LPBYTE* origData,int start,int dataLen,int level); ErrorCodeEnum BuildSupportedAppList(CardReadType eType,DeviceBaseClass *pCardX,vector& vAIDFromTerm); ErrorCodeEnum BuildAppListByAIDs(CardReadType eType,DeviceBaseClass *pCardX,vector& vAIDFromTerm); void ProcessADFRecord(vector& record,int start); void ProcessDDFRecord(CardReadType eType,DeviceBaseClass *pCardX,vector& vAIDFromTerm,LPBYTE pDDF,int length); void ProcessSFIRecord(LPBYTE* rec,int lenRec); void ProcessRestrict(); void CardholderVerify(); void TermRiskManage(); int TermActionAnalyze(CardReadType eType,DeviceBaseClass *pCardX,CSimpleStringA &result,bool bOnlineOnly,bool bCDA,BYTE &d9f27); int IssueBankAuth(CardReadType eType,DeviceBaseClass *pCardX); void ExecuteIssuerScript(CardReadType eType,DeviceBaseClass *pCardX); int TransEnd(CardReadType eType,DeviceBaseClass *pCardX,bool bCDA); void SplitBusinessData(const char *pData,int size); int SplitOnlineReplyData(const char *pData,int size); void GetBaseInfoNotInRecord(CardReadType eType,DeviceBaseClass *pCardX); int ConstructARQCData(const char *pATC,char *&pDataToARQC,char *&pSomeICData); int FindTagValue(TagVectorType eType,ICData& data,bool bLevel,int start=0,int end=0); int ToFindTagValue(vector& vData,ICData& data,bool bLevel,int start,int end); ErrorCodeEnum AppSelected(CardReadType eType,DeviceBaseClass *pCardX,LPBYTE aid,BYTE lenAID); ErrorCodeEnum ReadData(CardReadType eType,DeviceBaseClass *pCardX,LPBYTE data,DWORD len); bool FillPDOL(ICData& pdol,LPBYTE* ppBYTE,DWORD& lenPDOL); bool FillCDOL(ICData& cdol,PBYTE &pBYTE,DWORD &lenPDOL); void ConstructAPDU(BYTE cls,BYTE ins,BYTE p1,BYTE p2,BYTE lc,LPBYTE data,LPBYTE le); BYTE GetP1(){return m_P1;} CSimpleStringA m_lastErrMsg; ErrorCodeEnum m_lastErrCode; CSimpleStringA m_lastApiName; private: CardIssuerClass *pCardI; RFICClass *pCardR; HMODULE m_hVerdorDll; ErrorCodeEnum m_testResult; CardIssuerStatus devStatus; BYTE m_CPUType,m_AIP[2],m_appVersion[2],m_TSI[2],m_TVR[5],m_IACReject[5],m_IACOnline[5],m_IACDefault[5] ,m_P1,m_randData[4],m_CVR[4]; LPBYTE m_pTACReject,m_pIACOnline,m_pTACOnline,m_pIACDefault,m_pTACDefault; char *m_pARPC,*m_pARC,*m_pScript;//*m_pDataToARQC long xxTest; BYTE m_APDUsendBuf[1024]; //BYTE *m_pAPDUSendBuf; int m_lenAPDU; char m_AuthCode[2]; //ICData gpoData; vector m_vICData,m_vBusData; vector m_vADFRec; vector m_vOnlineReplyData; //int SplitTrack2(CSimpleStringA pTrack2,Track2Data &decodeData); //int SplitUnionPayTrack2(CSimpleStringA pTrack2,Track2Data &decodeData); void LogErrInfo(const char*); }; //#ifdef __cplusplus // } //#endif #endif//__CARD_ASSIST_H