CardAssist.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifndef __CARD_ASSIST_H
  2. #define __CARD_ASSIST_H
  3. #pragma once
  4. #include "stdafx.h"
  5. #include "ICDataElement.h"
  6. #include "CardIssuerClass.h"
  7. #include "CardSwiperClass.h"
  8. #include "RFICClass.h"
  9. #include <vector>
  10. using namespace std;
  11. enum CardReadType
  12. {
  13. CARD_MACHINE_ISSUER = 0,
  14. CARD_MACHINE_SWIPER,
  15. CARD_MACHINE_RFIC,
  16. CARD_MACHINE_SWIPER_RF,
  17. };
  18. enum TagVectorType
  19. {
  20. TAG_VECTOR_IC,
  21. TAG_VECTOR_BUS,
  22. };
  23. struct FormUnit
  24. {
  25. int fstSize;
  26. int sndSize;
  27. char *pFst;
  28. char *pSnd;
  29. };
  30. //#ifdef __cplusplus
  31. //extern "C" {
  32. //#endif
  33. //#define CARDASSIST_API __declspec(dllexport)
  34. const int MAX_TEST_SHOW = 1024;
  35. const int MAX_SEND_BUF = 1024;
  36. bool IsDoubleByteFlag(BYTE data);
  37. bool IsForm(LPBYTE data,int flagLen);
  38. int SplitICData(vector<ICData>& vResult,LPBYTE* origData,int start,int dataLen,int level,int origDataLen);
  39. int StrBuf2HexBuf(LPCTSTR strBuf,PBYTE* hexBuf);
  40. int HexBuf2StrBuf(PBYTE hexBuf,char** strBuf,DWORD len);
  41. int SplitFormString(vector<FormUnit> &vResult,const char *pData,int size,char fstP,char sndP);
  42. int char2int(char ch);
  43. class CCardProcess
  44. {
  45. public:
  46. CCardProcess():m_pARPC(NULL),m_pARC(NULL),m_pScript(NULL),m_pTACReject(NULL),m_pIACOnline(NULL),
  47. m_pTACOnline(NULL),m_pIACDefault(NULL),m_pTACDefault(NULL){}
  48. ~CCardProcess();
  49. void DataInit();
  50. bool DetectIfICCard(CardReadType eType,DeviceBaseClass *pCardX,int &cardType);//cardType:0x41'A',type A; 0x42'B',type B; 0x4d'M',type M
  51. bool GetICDataFromCard(CardReadType eType,DeviceBaseClass *pCardX,const char *pAID);
  52. //int SplitICData(vector<ICData>& vResult,LPBYTE* origData,int start,int dataLen,int level);
  53. ErrorCodeEnum BuildSupportedAppList(CardReadType eType,DeviceBaseClass *pCardX,vector<AIDData>& vAIDFromTerm);
  54. ErrorCodeEnum BuildAppListByAIDs(CardReadType eType,DeviceBaseClass *pCardX,vector<AIDData>& vAIDFromTerm);
  55. void ProcessADFRecord(vector<ICData>& record,int start);
  56. void ProcessDDFRecord(CardReadType eType,DeviceBaseClass *pCardX,vector<AIDData>& vAIDFromTerm,LPBYTE pDDF,int length);
  57. void ProcessSFIRecord(LPBYTE* rec,int lenRec);
  58. void ProcessRestrict();
  59. void CardholderVerify();
  60. void TermRiskManage();
  61. int TermActionAnalyze(CardReadType eType,DeviceBaseClass *pCardX,CSimpleStringA &result,bool bOnlineOnly,bool bCDA,BYTE &d9f27);
  62. int IssueBankAuth(CardReadType eType,DeviceBaseClass *pCardX);
  63. void ExecuteIssuerScript(CardReadType eType,DeviceBaseClass *pCardX);
  64. int TransEnd(CardReadType eType,DeviceBaseClass *pCardX,bool bCDA);
  65. void SplitBusinessData(const char *pData,int size);
  66. int SplitOnlineReplyData(const char *pData,int size);
  67. void GetBaseInfoNotInRecord(CardReadType eType,DeviceBaseClass *pCardX);
  68. int DetectAndReadICData(CardReadType eType,DeviceBaseClass *pCardX,const char *pAID,int &cardType);
  69. int ConstructARQCData(const char *pATC,char *&pDataToARQC,char *&pSomeICData);
  70. int FindTagValue(TagVectorType eType,ICData& data,bool bLevel,int start=0,int end=0);
  71. int ToFindTagValue(vector<ICData>& vData,ICData& data,bool bLevel,int start,int end);
  72. ErrorCodeEnum AppSelected(CardReadType eType,DeviceBaseClass *pCardX,LPBYTE aid,BYTE lenAID);
  73. ErrorCodeEnum ReadData(CardReadType eType,DeviceBaseClass *pCardX,LPBYTE data,DWORD len);
  74. bool FillPDOL(ICData& pdol,LPBYTE* ppBYTE,DWORD& lenPDOL);
  75. bool FillCDOL(ICData& cdol,PBYTE &pBYTE,DWORD &lenPDOL);
  76. void ConstructAPDU(BYTE cls,BYTE ins,BYTE p1,BYTE p2,BYTE lc,LPBYTE data,LPBYTE le);
  77. BYTE GetP1(){return m_P1;}
  78. private:
  79. CardIssuerClass *pCardI;
  80. CardSwiperClass *pCardS;
  81. RFICClass *pCardR;
  82. HMODULE m_hVerdorDll;
  83. //bool m_devInit,m_bCancelAccept,m_bWaitingAccept,m_bWaitAccepteMore,m_bExit;
  84. ErrorCodeEnum m_testResult;
  85. //int m_CardInit,m_CardRemains,m_CardIssued,m_CardCaptured,m_CardMixed,m_CardPercent;
  86. CardIssuerStatus devStatus;
  87. //DevStateEnum m_eDevState;
  88. BYTE m_CPUType,m_AIP[2],m_appVersion[2],m_TSI[2],m_TVR[5],m_IACReject[5],m_IACOnline[5],m_IACDefault[5]
  89. ,m_P1,m_randData[4],m_CVR[4];
  90. LPBYTE m_pTACReject,m_pIACOnline,m_pTACOnline,m_pIACDefault,m_pTACDefault;
  91. char *m_pARPC,*m_pARC,*m_pScript;//*m_pDataToARQC
  92. long xxTest;
  93. BYTE m_APDUsendBuf[1024];
  94. //BYTE *m_pAPDUSendBuf;
  95. int m_lenAPDU;
  96. char m_AuthCode[2];
  97. //bool m_bOnlineOnly,m_bCDA;
  98. //ICData gpoData;
  99. vector<ICData> m_vICData,m_vBusData;
  100. vector<ADFRecord> m_vADFRec;
  101. vector<FormUnit> m_vOnlineReplyData;
  102. //int SplitTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
  103. //int SplitUnionPayTrack2(CSimpleStringA pTrack2,Track2Data &decodeData);
  104. void LogErrInfo(const char*);
  105. };
  106. //#ifdef __cplusplus
  107. // }
  108. //#endif
  109. #endif//__CARD_ASSIST_H