CARD-v4.HPP 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829
  1. #ifndef CARD_HPP
  2. #define CARD_HPP
  3. //////////////////////////////////////////////////////////////////////////////
  4. // MODULE: Y-PR50.HPP
  5. // PORPUSE: Print Sub Class
  6. // low level print control
  7. // margetic read and write
  8. // password keyboard input
  9. // DEVELOP TOOL: BOLAND C++ V3.1
  10. // ZINC C++ V3.5
  11. // AUTHOR: HUANG-ZHEN
  12. // WEI-JIANGBO
  13. // DATE: 1995.1.8
  14. // VERSION: Version 3.0
  15. //
  16. //
  17. //hz, modified on 95.1.19
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #ifdef linux
  21. typedef int BOOL;
  22. #define TRUE 1
  23. #define FALSE 0
  24. #else
  25. //#include <bios.h>
  26. #include <dos.h>
  27. #include <conio.h>
  28. #include <string.h>
  29. #include <windows.h>
  30. #endif //linux
  31. #define BAUD 0xe0 /* Baud 9600 */
  32. #define BAUD_RATE 9600
  33. #define ShowLogo 57
  34. #define RS_INIT 0x00
  35. #define RS_XMT 0x01
  36. #define RS_RCV 0x02
  37. #define RS_STATUS 0x03
  38. #define esc 0x1b
  39. #ifdef linux
  40. #define true 1
  41. #define false 0
  42. #endif //linux
  43. #define TIM_OUT_BIT 0x8000
  44. #define XMT_RDV_BIT 0x2000
  45. #define BRK_DET_BIT 0x1000
  46. #define FRM_ERR_BIT 0x0800
  47. #define PAR_ERR_BIT 0x0400
  48. #define OVR_RUN_BIT 0x0200
  49. #define RCV_ERR_BIT 0x8e00
  50. //hz, #define BAUD 0xe0 /* Baud 9600 */
  51. #define PARA 0x00 /* Para None */
  52. #define STOP 0x00 /* Stop 1 */
  53. #define DATA 0x03 /* Data 8 */
  54. #define COM1 1 //hz, 0 /* COM1 port */
  55. #define PORT_ERR 1
  56. #define PORT_OK 0
  57. #define BUFSIZE 1024
  58. #define CLR_BIM "\033\062"
  59. #define SET_BIM "\033\061"
  60. #define LINE_BUFSIZ 640 //hz, change 240, now, can write 40 chinese word
  61. #ifdef linux
  62. #define true 1
  63. #define false 0
  64. #endif //linux
  65. #define YES 1
  66. #define NO 0
  67. #define OK 1
  68. #define ERR 0
  69. #define ABORT -1
  70. #define NOTHING 0
  71. #define PUBLIC
  72. #define LOCAL static
  73. #define CME_USER_BREAK 2
  74. #define CM_FORMAT_ERR 3
  75. #define CM_LEN_TRACK1 110
  76. #define CM_LEN_TRACK2 40
  77. #define CM_LEN_TRACK3 110
  78. #define CM_LEN_BUFF (CM_LEN_TRACK1+CM_LEN_TRACK2+CM_LEN_TRACK3+50)
  79. #define PORT_COM1 0x03F8 /* COM 1 */
  80. #define PORT_COM2 0x02F8 // COM 2
  81. #define PORT_DATA 0 /* DATA */
  82. #define PORT_IER 1 /* Interrupt enable register */
  83. #define PORT_IIR 2 /* Interrupt info. register */
  84. #define PORT_LCR 3 /* Line control register */
  85. #define PORT_MCR 4 /* Modem control register */
  86. #define PORT_LSR 5 /* Line status register */
  87. #define PORT_MSR 6 /* Modem status register */
  88. typedef struct
  89. {
  90. char track1[CM_LEN_TRACK1];
  91. char track2[CM_LEN_TRACK2];
  92. char track3[CM_LEN_TRACK3];
  93. } TCMtrackdata;
  94. //typedef char BYTE;
  95. //typedef unsigned int WORD;
  96. typedef int PR50_BOOLEAN;
  97. struct CHIN_font
  98. {
  99. char upper_half[16];
  100. char lower_half[16];
  101. };
  102. #pragma warning(disable:4786)
  103. #include <string>
  104. #include <map>
  105. #include <fstream>
  106. using namespace std;
  107. typedef struct SIGN_CARD_DATA //hz, 97.01.30
  108. {
  109. char pan[18]; // left
  110. //char merchant[8];
  111. //char cardType; // 1.sign card 2.save card 3...
  112. //char moneyCode[2]; // 10
  113. //char amount[5];
  114. char exprDate[4];
  115. char cvc1[3];
  116. //char cvc2[15];
  117. //char reserved[10];
  118. char stringEnd;
  119. } sign_card_data;
  120. typedef struct SIGN_CARD_TRACK2 //hz, 97.01.30
  121. {
  122. //char stx; // ;
  123. char pan[18];
  124. char fs; // =
  125. char exprDate[4];
  126. char cardType[3]; // 530
  127. char cvc[11];
  128. //char etx; // ?
  129. char stringEnd;
  130. } sign_card_track2;
  131. typedef struct SIGN_CARD_TRACK3 //hz, 97.01.30
  132. {
  133. //char stx; // !
  134. char formate[2]; // 01
  135. char pan[18];
  136. char fs1; // =
  137. char country[3]; // 156
  138. char moneyCode[3]; // 156
  139. char point; // 0
  140. char auth[4]; // 5000
  141. char remSum[4]; // 5000
  142. char rsDate[4]; // 0000
  143. char rLength[2]; // 01
  144. char retry; // 3
  145. char pinOffset[6]; // 000000
  146. char cardType[3]; // 530
  147. char TA_SR1[2]; // 00
  148. char TA_SR2[2]; // 00
  149. char exprDate[4];
  150. char fix[10]; // 1000000000
  151. char san1[12]; // 000000000000
  152. char fs2; // =
  153. char san2[12]; // 000000000000
  154. char fs3; // =
  155. char tFlag; // 0
  156. char cvc[6];
  157. char sFlag; // 0
  158. //char etx; // ?
  159. char stringEnd;
  160. } sign_card_track3;
  161. typedef struct CREDIT_CARD_TRACK2
  162. {
  163. //char start;
  164. char masterAccount[16];
  165. char separator1; // = '\'';
  166. char expirationDate[4];
  167. char serviceCode[3];
  168. char discretionaryData[11];
  169. //char end;
  170. char stringEnd;
  171. } credit_card_track2;
  172. typedef struct NEW_CREDIT_TRACK2
  173. {
  174. //char start;
  175. char masterAccount[16];
  176. char separator1; // = '\'';
  177. char otherData[15];
  178. //char end;
  179. char stringEnd;
  180. } new_credit_track2;
  181. typedef struct SZ_TRACK2
  182. {
  183. //char start;
  184. char masterAccount[15];
  185. char separator1; // = '\'';
  186. char constant[10]; //= "1560000514"
  187. char cardType;
  188. char area[8];
  189. //char end;
  190. char stringEnd;
  191. } sz_track_2;
  192. typedef struct TRACK2
  193. {
  194. //char start;
  195. char masterAccount[15+3];
  196. char separator1; // = '\'';
  197. char constant[10]; //= "1560000514"
  198. char cardType;
  199. char area[7];
  200. //char end;
  201. char stringEnd;
  202. } track_2;
  203. typedef struct TRACK3
  204. {
  205. char formatCode[2]; // = { '0', '1'};
  206. char masterAccount[15+3];
  207. char separator1; // = '\'';
  208. char constant1_0[22];
  209. char controlPara[6];
  210. char constant1_1[12];
  211. char separator2;
  212. char slave1[11];
  213. char separator3;
  214. char slave2[9];
  215. char separator4;
  216. char constant2[7];
  217. char cardType;
  218. char area[8];
  219. char stringEnd;
  220. } track_3;
  221. typedef struct SZ_TRACK3
  222. {
  223. char formatCode[2]; // = { '0', '1'};
  224. char masterAccount[15]; //hz, 96.05.28
  225. char separator1; // = '\'';
  226. char constant1_0[22];
  227. char controlPara[6];
  228. char constant1_1[12];
  229. char separator2;
  230. char slave1[11];
  231. char separator3;
  232. char slave2[9];
  233. char separator4;
  234. char constant2[7];
  235. char cardType;
  236. char area[8];
  237. char stringEnd;
  238. } sz_track_3;
  239. typedef struct INTERNET_TRACK2
  240. {
  241. //char start;
  242. char PAN[16];
  243. char separator1[1]; // = '\'';
  244. char expirationDate[4]; //
  245. char serviceCode[3];
  246. char CVV[3];
  247. //char end;
  248. char stringEnd;
  249. } internet_track_2;
  250. typedef struct INTERNET_TRACK3
  251. {
  252. char formatCode[2]; // = { '0', '1'};
  253. char PAN[16];
  254. char separator1[1]; // = '\'';
  255. char countryCode[3];
  256. char currency[3];
  257. char currencyExponent[1];
  258. char amountAuthorized[4];
  259. char amountRemaining[4];
  260. char cycleBegin[4];
  261. char cycleLength[2];
  262. char retryCount[1];
  263. char PINPARM[6];
  264. char interchangeControl[1];
  265. char serviceRestriction[2];
  266. char SRofSAN1[2];
  267. char SRofSAN2[2];
  268. char expiryDate[4];
  269. char sequenceNo[1];
  270. char securityNo[1];
  271. char SAN1[12];
  272. char separator2[1];
  273. char SAN2[12];
  274. char separator3[1];
  275. char relayMarker[1];
  276. char CCD[6];
  277. char transactionDate[1];
  278. char AVV[1];
  279. char INNIC[3];
  280. char CVV[3];
  281. char stringEnd;
  282. } internet_track_3;
  283. /*
  284. typedef struct NEW_TRACK0
  285. {
  286. char masterAccount[16];
  287. char cardSerial;
  288. char SVCD[6];
  289. char oldRGCD[4];
  290. char oldCUNO[8];
  291. char oldPSBK[8];
  292. char stringEnd;
  293. } new_track_0;
  294. */
  295. typedef struct NEW_TRACK0
  296. {
  297. char masterAccount[16];
  298. char cardSerial;
  299. char SVCD[6];
  300. char oldRGCD[4];
  301. char expireDate[4];
  302. char stringEnd;
  303. } new_track_0;
  304. typedef struct IC_TRACK0
  305. {
  306. char masterAccount[19];
  307. char cardSerial;
  308. char SVCD[6];
  309. char oldRGCD[4];
  310. char expireDate[4];
  311. char stringEnd;
  312. } ic_track_0;
  313. typedef struct NEW_TRACK2 //9555银联卡
  314. {
  315. // char start; // ;
  316. char masterAccount[16];
  317. char separator1; // '
  318. char expireDate[4]; // * 9912->4912
  319. char serviceCode[3]; // 220->120
  320. char appendData[13]; // SVCD(6) +卡顺号(1) +CVC(3)+'000'
  321. // char endFlag; // ?
  322. // char LRC;
  323. char stringEnd;
  324. } new_track_2;
  325. typedef struct NEW1_TRACK2 // 6字头银联卡
  326. {
  327. // char start; // ;
  328. char masterAccount[16]; //*
  329. char separator1; // '
  330. char expireDate[4]; // * 9912->4912
  331. char serviceCode[3]; // 101->120
  332. char localCheckMessage[5]; // 12345 PVKI(1) + PVV(4)
  333. char appendData[8]; //* 随机数(2)+ CVV(3) + 随机数(3)
  334. // char endFlag; // ?
  335. // char LRC;
  336. char stringEnd;
  337. } new1_track_2;
  338. typedef struct IC_TRACK2 // 6字头IC卡, zhanglei, 2010.09.19
  339. {
  340. // char start; // ;
  341. char masterAccount[19]; //* 帐号长度与NEW1_TRACK2不同,localCheckMessage和appendData调整
  342. char separator1; // '
  343. char expireDate[4]; // * 9912->4912
  344. char serviceCode[3]; // 101->120
  345. char localCheckMessage[3]; // 12345 PVKI(1) + PVV(4)
  346. char appendData[7]; //* 随机数(2)+ CVV(3) + 随机数(3)
  347. // char endFlag; // ?
  348. // char LRC;
  349. char stringEnd;
  350. } ic_track_2;
  351. typedef struct HK_TRACK0 //Lint 香港两地通 2003-1-6 16:16
  352. {
  353. char masterAccount[16];
  354. char cardSerial;
  355. char SVCD[6];
  356. char oldRGCD[4];
  357. char expireDate[4];
  358. char language;
  359. char PIN; //* PIN校验位
  360. char PINOffset[5]; //* PIN偏移量
  361. char stringEnd;
  362. } hk_track_0;
  363. typedef struct HK_TRACK2 //Lint 香港一卡通 2002-11-25 16:53
  364. {
  365. // char start; // ;
  366. char masterAccount[16]; //*
  367. char separator1; // '
  368. char expireDate[4]; // *
  369. char serviceCode[3]; // 101
  370. char localCheckMessage[5]; // 12345 PVKI(1) + PVV(4)
  371. char appendData[8]; //* 随机数(2)+ CVV(3) + 随机数(3)
  372. // char endFlag; // ?
  373. // char LRC;
  374. char stringEnd;
  375. } hk_track_2;
  376. //extern const char defHKTrack2[]; //香港一卡通 2002-11-25 17:03
  377. //extern const char defNewTrack2[];
  378. typedef struct NEW_TRACK3
  379. {
  380. // char start; // ;
  381. char formatCode[2]; // 99
  382. char masterAccount[16];
  383. char separator1; // '
  384. char countryCode[3]; // 156
  385. char currencyCode[3]; // 156
  386. char moneyExp; // 0
  387. char periodAccredit[4]; // 5000
  388. char periodBalance[4]; // 5000
  389. char periodStartDate[4]; // 0000->0001
  390. char periodLength[2]; // 01
  391. char passwordRetry; // 5
  392. char SVCD[6];
  393. char exchangeCode; // 2
  394. char PANTASR[2]; // 14
  395. char SAN1TASR[2]; // 00
  396. char SAN2TASR[2]; // 00
  397. char expireDate[4]; // * 9912->4912
  398. char cardSerial;
  399. char separator2; // '
  400. char SAN1[10]; // (新)内部客户号:分行(3)+客户号(6)+校验(1)
  401. char separator3; // '
  402. char SAN2[9]; // * 卡凭证号(8)+校验(1)
  403. char separator4; // '
  404. char transferFlag; // 0
  405. char checkNum[6]; // 加密校验数
  406. char appendData[16]; // * (旧)分行号(4)+客户号(8)+校验(1)+'000'
  407. // char endFlag; // ?
  408. // char LRC;
  409. char stringEnd;
  410. } new_track_3;
  411. typedef struct IC_TRACK3 // 6字头IC卡, zhanglei, 2010.09.19
  412. {
  413. // char start; // ;
  414. char formatCode[2]; // 99
  415. char masterAccount[19]; //* 帐号长度与NEW1_TRACK3不同
  416. char separator1; // '
  417. char countryCode[3]; // 156
  418. char currencyCode[3]; // 156
  419. char moneyExp; // 0
  420. char periodAccredit[4]; // 5000
  421. char periodBalance[4]; // 5000
  422. char periodStartDate[4]; // 0000->0001
  423. char periodLength[2]; // 01
  424. char passwordRetry; // 5
  425. char SVCD[6];
  426. char exchangeCode; // 2
  427. char PANTASR[2]; // 14
  428. char SAN1TASR[2]; // 00
  429. char SAN2TASR[2]; // 00
  430. char expireDate[4]; // * 9912->4912
  431. char cardSerial;
  432. char separator2; // '
  433. char SAN1[10]; // (新)内部客户号:分行(3)+客户号(6)+校验(1)
  434. char separator3; // '
  435. char SAN2[9]; // * 卡凭证号(8)+校验(1)
  436. char separator4; // '
  437. char transferFlag; // 0
  438. char checkNum[6]; // 加密校验数
  439. char appendData[13]; // * (旧)分行号(4)+客户号(8)+校验(1)+'000'
  440. // char endFlag; // ?
  441. // char LRC;
  442. char stringEnd;
  443. } ic_track_3;
  444. typedef struct HK_TRACK3 // 香港一卡通3磁道格式包
  445. {
  446. // char start; // ;
  447. char formatCode[2]; // 92
  448. char cardType[2]; // 40 卡类别
  449. char bankSign[4]; // 2658 发卡行标识
  450. char masterAccount[12]; //* 右10位主账号+00
  451. char separator1; // '
  452. char separator2; // '
  453. char currencyCode[3]; // 000 货币代码
  454. char currencyIndex; // 0 货币指数
  455. //char countryCode[3]; // 156
  456. char VISAGrantDegree[2]; // 00 VISA账户周期授权额度
  457. char grantDegree[2]; // 00 本行账户周期授权额度
  458. char transferrableBalance[4]; //0000 VISA当前周期内可提款或转账的余额
  459. char secondBankSign[4]; //0000 第二发卡行标示
  460. //char moneyExp; // 0
  461. //char periodAccredit[4]; // 5000
  462. //char periodBalance[4]; // 5000
  463. //char periodStartDate[4]; // 0000
  464. char periodLength[2]; // 00 周期长度,ATM忽略
  465. char passwordRetry; // 4 密码重试次数
  466. char PIN; //* PIN校验位
  467. char PINOffset[5]; //* PIN偏移量
  468. // char checkNum[6]; // 校验和
  469. char exchangeCode; // 0 交换控制符
  470. char masterAccountType; //1 主账户类型 1 - 储蓄帐户2 - 支票账户3 - 信用卡或联名卡账户4 - 员工账户5 - 无存折储蓄帐户6 - 保留
  471. char masterAccountLimit; //0 主账户限制码 0 - 无限制1 - 禁止扣帐(允许存款、转入)2 - 禁止存入(允许提款、转出)
  472. char firstSubsidiaryAccountType; // 0 第一辅助账户类型 0 - 不存在编码;其他同masterAccountType
  473. char firstSubsidiaryAccountLimit; // 0 第一辅助账户限制码
  474. char secondSubsidiaryAccountMessage[2]; //00 第二辅助账户及限制码
  475. char expireDate[4]; //* 失效日期
  476. char cardSerial[2]; //* 卡顺序号
  477. //char firstSubsidiaryAccount[12]; //000000000000 第一辅助账号
  478. //char secondSubsidiaryAccount[12]; //000000000000 第二辅助账号
  479. char appendData[24]; //* 附加数据 "YYYYMMDD"(申请日期)+随机数(7)+CVV(3)+随机数(6)
  480. char lastTranDate[4]; // 0000 上次交易日期
  481. char lastTranTime[4]; // 0000 上次交易时间
  482. char lastVISADate[4]; // 0000 上次VISA交易日期
  483. char lastVISATime[4]; // 0000 上次VISA交易时间
  484. char currentTransferrableBalance[3]; // 000 本行账户当前周期内可提款或转账的余额
  485. char language; //* 语言代码 1-中文 2-英文
  486. // char endFlag; // ?
  487. // char LRC;
  488. char stringEnd;
  489. } hk_track_3;
  490. typedef struct INTER_TRACK0 //Lint 国际借记卡 2003-1-6 16:16
  491. {
  492. char masterAccount[16];
  493. char cardSerial;
  494. char SVCD[6];
  495. char oldRGCD[4];
  496. char expireDate[4];
  497. char stringEnd;
  498. } inter_track_0;
  499. typedef struct INTER_TRACK2 //Lint 国际借记卡2磁道 2004-2-13 15:22
  500. {
  501. // char start; // ;
  502. char masterAccount[16]; //*
  503. char separator1; // '
  504. char expireDate[4]; // *
  505. char serviceCode[3]; // 101
  506. char localCheckMessage[5]; // 12345 PVKI(1) + PVV(4)
  507. char appendData[8]; //* 随机数(2)+ CVV(3) + 随机数(3)
  508. // char endFlag; // ?
  509. // char LRC;
  510. char stringEnd;
  511. } inter_track_2;
  512. typedef struct INTER_TRACK3 // 国际借记卡3磁道格式包
  513. {
  514. // char start; // ;
  515. char formatCode[2]; // 99
  516. char cardType[2]; // 41 卡类别
  517. char bankSign[4]; // 0062 发卡行标识
  518. char masterAccount[10]; //* 右10位主账号
  519. char separator1; // '
  520. char nationCode[3]; // 156 国家代码
  521. char currencyCode[3]; // 156 货币代码
  522. char currencyIndex; // 0 货币指数
  523. char periodAccredit[4]; // 5000 周期授予量
  524. char periodBalance[4]; //5000 当前周期内可提款或转账的余额
  525. char periodStartDate[4]; //0000 周期开始日期
  526. char periodLength[2]; // 01 周期长度,ATM忽略
  527. char passwordRetry; // 5 密码重试次数
  528. //char PIN; //* PIN校验位
  529. //char PINOffset[5]; //* PIN偏移量
  530. char grantControlCode[6]; //CVV(3)+随机数(3)
  531. char exchangeCode; // 2 交换控制符
  532. char masterAccountType; //1 主账户类型 1 - 储蓄帐户2 - 支票账户3 - 信用卡或联名卡账户4 - 员工账户5 - 无存折储蓄帐户6 - 保留
  533. char masterAccountLimit; //4 主账户限制码 0 - 无限制1 - 禁止扣帐(允许存款、转入)2 - 禁止存入(允许提款、转出)
  534. char firstSubsidiaryAccountType[2]; // 00 第一辅助账户类型 0 - 不存在编码;其他同masterAccountType
  535. char firstSubsidiaryAccountLimit[2]; // 00 第一辅助账户限制码
  536. char expireDate[4]; //* 失效日期
  537. char cardSerial; //* 卡顺序号
  538. char encryptCode; //' 卡保密号 缺省为分隔符
  539. char firstSubsidiaryAccount[10]; //000000000000 第一辅助账号 分行(3)+客户号(6)+校验(1)
  540. char separator2; // '
  541. char secondSubsidiaryAccount[9]; //000000000000 第二辅助账号 卡凭证号(8)+校验(1)
  542. char separator3; // '
  543. char passingCode; // 0
  544. char checkNum[6]; // 校验和
  545. char appendData[16]; //* 附加数据 分行号(4)+客户号(8)+校验(1)+"000"
  546. // char endFlag; // ?
  547. // char LRC;
  548. char stringEnd;
  549. } inter_track_3;
  550. typedef struct NWPK_TRACK0 // 新系统存折
  551. {
  552. char masterAccount[15];
  553. char PSBNBR[10];
  554. char SVCD[6];
  555. char stringEnd;
  556. } nwpk_track_0;
  557. typedef struct NWPK_TRACK2 // 新系统存折
  558. {
  559. // char start; // ;
  560. char masterAccount[15]; // *
  561. char separator1; // '
  562. char PSBNBR[10]; // *
  563. char SVCD[6]; // *
  564. char AccountChk; // *
  565. // char endFlag; // ?
  566. // char LRC;
  567. char stringEnd;
  568. } nwpk_track_2;
  569. typedef struct NWPK_TRACK3 // 新系统存折
  570. {
  571. // char start; // ;
  572. char formatCode[2]; // 60
  573. char masterAccount[15]; // *
  574. char separator1; // '
  575. char countryCode[3]; // 156
  576. char currencyCode[3]; // 156
  577. char passwordRetry; // 5
  578. char AccountChk; // *
  579. char LENSTR[10]; // 0015100699
  580. char separator2; // '
  581. char PSBNBR[10]; // *
  582. char PSBCHK; // *
  583. char separator3; // '
  584. char SVCD[6]; // *
  585. char CVCCHK; // *
  586. char separator4; // '
  587. char checkNum[6]; // 000000
  588. char appendData[16]; // 8130379181303791
  589. // char endFlag; // ?
  590. // char LRC;
  591. char stringEnd;
  592. } nwpk_track_3;
  593. typedef struct NWUS_TRACK0 // 新系统用户卡
  594. {
  595. char USRNBR[6];
  596. char cardSerial;
  597. char SVCD[6];
  598. char stringEnd;
  599. } nwus_track_0;
  600. typedef struct NWUS_TRACK2 // 新系统用户卡
  601. {
  602. // char start; // ;
  603. char USRNBR[6]; // *
  604. char separator1; // '
  605. char cardSerial; // *
  606. char SVCD[6]; // *
  607. char USRCHK; // *
  608. // char endFlag; // ?
  609. // char LRC;
  610. char stringEnd;
  611. } nwus_track_2;
  612. typedef struct NWUS_TRACK3 // 新系统用户卡
  613. {
  614. // char start; // ;
  615. char formatCode[2]; // 70
  616. char USRNBR[6]; // *
  617. char separator1; // '
  618. char passwordRetry; // 5
  619. char USRCHK; // *
  620. char LENSTR[10]; // 0006010699
  621. char cardSerial; // *
  622. char separator2; // '
  623. char SVCD[6]; // *
  624. char CVCCHK; // *
  625. char separator3; // '
  626. char checkNum[6]; // 000000
  627. char appendData[16]; // 8130379181303791
  628. // char endFlag; // ?
  629. // char LRC;
  630. char stringEnd;
  631. } nwus_track_3;
  632. typedef struct AE_TRACK2_DATA // 运通借记卡oilyang 2021.9.23
  633. {
  634. char account[15]; //*Primary Account Number
  635. char separator1; // Field Separator
  636. char expireDate[4]; // Card Expiration Date
  637. char serviceCode[3]; // Service Code
  638. char effectiveDate[4]; // Card Effective Date
  639. char cardSeCode[5]; // Card Security Code
  640. char reserved[3]; // Card Serial(1) + (2)
  641. char langCode[2];
  642. char stringEnd;
  643. } ae_track2_data;
  644. typedef struct AE_T2_DATA
  645. {
  646. char masterAccount[15];
  647. char cardSerial;
  648. char cardSeCode[5];
  649. char expireDate[4];
  650. char stringEnd;
  651. } ae_t2_data;
  652. #define TRACK_DATA_LEN 300
  653. class CARD
  654. {
  655. private:
  656. map<string,string> m_BinSvcCod;
  657. void LoadFromFile();
  658. string GetSvcCod(string key);
  659. public:
  660. CARD(){LoadFromFile();};
  661. ~CARD(){};
  662. char* SIGNCARD_ISOcode( SIGN_CARD_DATA *data); //hz, 97.01.30
  663. char* SIGNCARD_ISOdecode( char *trackData); //hz, 97.01.30
  664. char plus(char ch1, char ch2);
  665. char minus(char ch1, char ch2);
  666. char *plusString( char *str1, char *str2, int len);
  667. char *minusString( char *str1, char *str2, int len);
  668. char *codeUserCard( char *data);
  669. char *decodeUserCard( char *data, char *SVCD);
  670. char *codeUserCardTrack( char *data);
  671. char *decodeUserCardTrack( char *data, char *SVCD);
  672. char trackData[TRACK_DATA_LEN];
  673. char getCheckNum(char *string, int len=0);
  674. BOOL ISOcode( char *data);
  675. char* ISOdecode2( char *data);
  676. char* ISOdecode3( char *data);
  677. BOOL ISOdecode( char *data);
  678. char* CREDIT_ISOdecode( char *data);
  679. void INTERNET_ISOcode( char *PAN, char *CVV);
  680. char* INTERNET_ISOdecode( char* PAN, char* CVV);
  681. BOOL Track23( char *strTrack2, char *strTrack3, BOOL bWrite, char* MARGType="23" );
  682. int ISONewCardType(char * CardBin);
  683. BOOL ISONewcode( char *data);
  684. BOOL ISONewcode0( char *data); //原来9字头卡
  685. BOOL ISONewcode1( char *data); //八转十六BZSL专用 6字头卡
  686. BOOL ISONewdecode( char *data,char* MARGType="23");
  687. BOOL ISOHKcode( char *data); //Lint 香港一卡通专用
  688. BOOL ISOHKdecode( char *data,char* MARGType="23");
  689. BOOL ISOHKcode_help( char *data, BOOL isIC); //Lint 香港一卡通专用
  690. BOOL ISOHKdecode_help( char *data,char* MARGType, BOOL* isIC);
  691. char* trimstr(char* strSrc);
  692. BOOL ISOINTERcode( char *data); //Lint 国际借记卡
  693. BOOL ISOINTERcodetrack1( char *data, char *name, char *parmTrack1);
  694. BOOL ISOINTERdecode( char *data,char* MARGType = "23");
  695. //Cai
  696. BOOL ISONWPKcode( char *data);
  697. BOOL ISONWPKdecode( char *data,char* MARGType="23");
  698. BOOL ISONWUScode( char *data);
  699. BOOL ISONWUSdecode( char *data,char* MARGType="23");
  700. BOOL CMBcode( char * type, char * data, char* MagData);
  701. BOOL CMBdecode( char* MagData, char * type, char * data);
  702. BOOL CMBcodeEx( char * type, char * data, char* MagData);
  703. BOOL CMBdecodeEx( char* MagData, char * type, char * data);
  704. BOOL CMBdecodeMag2( char* Mag2Data, char * data);
  705. //zhanglei, IC磁条卡, 20100919
  706. BOOL ICcode( char *data);
  707. BOOL ICdecode( char *data,char* MARGType="23");
  708. BOOL Othdecode( char* MagData, char * type, char * data);
  709. };
  710. #if (!defined(_WIN32) && !defined(_WIN64))
  711. #include <stdint.h>
  712. #else
  713. #include <wtypes.h>
  714. #endif //NOT _WIN32
  715. #if (defined(_WIN32) || defined(_WIN64))
  716. # ifdef CMB_CARD_TRACK_EXPORTS
  717. # define CMB_CARD_TRACK_API __declspec(dllexport)
  718. # else
  719. # define CMB_CARD_TRACK_API __declspec(dllimport)
  720. # endif
  721. #elif ( defined(__GNUC__) && __GNUC__ >= 4 )
  722. # define CMB_CARD_TRACK_API __attribute__((visibility("default")))
  723. #else
  724. # define CMB_CARD_TRACK_API
  725. #endif
  726. #ifdef __cplusplus
  727. extern "C"
  728. {
  729. #endif
  730. CMB_CARD_TRACK_API bool CMBdecodeMag2(char* Mag2Data, char * data);
  731. CMB_CARD_TRACK_API bool CMBdecodeEx(char* MagData, char * type, char * data);
  732. #ifdef __cplusplus
  733. }
  734. #endif
  735. class TPR50
  736. {
  737. public:
  738. static int BPType;
  739. };
  740. #endif