CARD-v4.HPP 22 KB

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