Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

kcDataAnalysis.js 22KB

vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
vor 4 Tagen
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  1. "use strict";
  2. var _kcUtils = require("./kcUtils.js")
  3. , _kcUtils2 = _interopRequireDefault(_kcUtils);
  4. import _kcEtcVehicleInfo from "./kcEtcVehicleInfo.js";
  5. function _interopRequireDefault(e) {
  6. return e && e.__esModule ? e : {
  7. default: e
  8. }
  9. }
  10. function analysisinitIC(e) {
  11. var a = _kcUtils2.default.hexStr2byteArray(e)
  12. , r = {};
  13. return 73 == a.byteLength ? (0 == (128 & a[1]) ? (r.serviceCode = 0,
  14. r.serviceInfo = "初始化成功") : 128 == (128 & a[1]) ? (r.serviceCode = 1,
  15. r.serviceInfo = "初始化失败") : (r.serviceCode = -3,
  16. r.serviceInfo = "初始化异常"),
  17. r.serviceData = {},
  18. r.serviceData.dataBuff = e) : (r.serviceCode = -2,
  19. r.serviceInfo = "获取卡片初始化失败,信息长度有误"),
  20. r
  21. }
  22. function analysisCardbalance(e) {
  23. if (0 != _analysisIs9000(e).serviceCode)
  24. return e = _kcUtils2.default.byteArray2hexStr(e),
  25. console.log(e),
  26. e
  27. }
  28. function analysisCardFile(data) {
  29. let result = {};
  30. var offset = 0;
  31. result.serviceCode = 0;
  32. result.serviceInfo = "解析IC卡发行文件成功";
  33. result.serviceData = {};
  34. result.serviceData.etcVehicleInfo = _kcEtcVehicleInfo.EtcVehicleInfo.create();
  35. result.serviceData.etcVehicleInfo.icIssuer.issuerIdentity = data.substring(offset, offset + 16);
  36. offset += 16;
  37. result.serviceData.etcVehicleInfo.icIssuer.cardType = data.substring(offset, offset + 2);
  38. offset += 2;
  39. result.serviceData.etcVehicleInfo.icIssuer.cardVersion = data.substring(offset, offset + 2);
  40. offset += 2;
  41. result.serviceData.etcVehicleInfo.icIssuer.cardNetId = data.substring(offset, offset + 4);
  42. offset += 4;
  43. result.serviceData.etcVehicleInfo.icIssuer.cpuCardInnerId = data.substring(offset, offset + 16);
  44. offset += 16;
  45. result.serviceData.etcVehicleInfo.icIssuer.signedDate = data.substring(offset, offset + 8);
  46. offset += 8;
  47. result.serviceData.etcVehicleInfo.icIssuer.expiredDate = data.substring(offset, offset + 8);
  48. offset += 8;
  49. result.serviceData.etcVehicleInfo.icIssuer.plateNo = data.substring(offset, offset + 24);
  50. offset += 24;
  51. result.serviceData.etcVehicleInfo.icIssuer.userType = data.substring(offset, offset + 2);
  52. offset += 2;
  53. result.serviceData.etcVehicleInfo.icIssuer.plateColor = data.substring(offset, offset + 2);
  54. offset += 2;
  55. result.serviceData.etcVehicleInfo.icIssuer.vehicleModel = data.substring(offset, offset + 2);
  56. offset += 2;
  57. result.serviceData.etcVehicleInfo.icCardNumber = result.serviceData.etcVehicleInfo.icIssuer.cardNetId + result.serviceData.etcVehicleInfo.icIssuer.cpuCardInnerId;
  58. return result;
  59. }
  60. function analysisCardInfo(e) {
  61. console.log(e);
  62. var a = _kcUtils2.default.hexStr2byteArray(e);
  63. var r = {};
  64. var t = a.byteLength;
  65. e = _analysisIs9000(e);
  66. if (0 != e.serviceCode)
  67. return r = e;
  68. if (55 == t) {
  69. a.slice(2, 10);
  70. var e = a.slice(10, 11)
  71. , t = a.slice(11, 12)
  72. , s = a.slice(12, 14)
  73. , i = a.slice(14, 22)
  74. , l = a.slice(22, 26)
  75. , c = a.slice(26, 30)
  76. , n = a.slice(30, 42)
  77. , o = a.slice(42, 43)
  78. , y = a.slice(43, 44)
  79. , d = a.slice(44, 45)
  80. , a = a.slice(49, 53)
  81. , f = (r.serviceCode = 0,
  82. r.serviceInfo = "获取卡片信息成功",
  83. r.serviceData = {},
  84. r.serviceData.cardId = _kcUtils2.default.byteArray2hexStr(s) + _kcUtils2.default.byteArray2hexStr(i),
  85. Number(e.toString()));
  86. switch (f) {
  87. case 0:
  88. f = "正常通行卡";
  89. break;
  90. case 1:
  91. f = "测试通行卡";
  92. break;
  93. case 2:
  94. f = "预编码通行卡";
  95. break;
  96. case 3:
  97. f = "公务卡";
  98. break;
  99. case 4:
  100. f = "预付卡";
  101. break;
  102. case 5:
  103. f = "电子标签";
  104. break;
  105. case 21:
  106. f = "年/月票卡";
  107. break;
  108. case 22:
  109. f = "储值卡";
  110. break;
  111. case 23:
  112. f = "记账卡";
  113. break;
  114. case 24:
  115. f = "PSAM卡";
  116. break;
  117. case 25:
  118. f = "ISAM卡";
  119. break;
  120. case 51:
  121. f = "收费员工作卡";
  122. break;
  123. case 52:
  124. f = "值班员工作卡";
  125. break;
  126. case 53:
  127. f = "维修员工作卡";
  128. break;
  129. case 54:
  130. f = "维护员工作卡";
  131. break;
  132. case 55:
  133. f = "高级维护员卡"
  134. }
  135. 6 <= f && f <= 20 ? f = "自定义" : 26 <= f && f <= 50 && (f = "保留"),
  136. r.serviceData.cardType = f,
  137. r.serviceData.cardVersion = _kcUtils2.default.byteArray2hexStr(t),
  138. r.serviceData.expiredDate = _kcUtils2.default.byteArray2hexStr(c);
  139. var v = _kcUtils2.default.byteArray2hexStr(y);
  140. switch (v) {
  141. case "00":
  142. v = "蓝色";
  143. break;
  144. case "01":
  145. v = "黄色";
  146. break;
  147. case "02":
  148. v = "黑色";
  149. break;
  150. case "03":
  151. v = "白色";
  152. break;
  153. case "04":
  154. case "05":
  155. v = "渐变绿";
  156. break;
  157. case "ff":
  158. v = "未知";
  159. break;
  160. default:
  161. v = "保留"
  162. }
  163. switch (r.serviceData.plateColor = v,
  164. r.serviceData.provider = "山东",
  165. r.serviceData.SignedDate = _kcUtils2.default.byteArray2hexStr(l),
  166. o = Number(o.toString())) {
  167. case 0:
  168. o = "普通车";
  169. break;
  170. case 6:
  171. o = "公务车";
  172. break;
  173. case 8:
  174. o = "军警车";
  175. break;
  176. case 10:
  177. o = "紧急车";
  178. break;
  179. case 12:
  180. o = "免费";
  181. break;
  182. case 14:
  183. o = "车队";
  184. break;
  185. default:
  186. o = 0 < o && o <= 20 ? "自定义" : "保留"
  187. }
  188. switch (r.serviceData.userType = o,
  189. d = Number(d.toString())) {
  190. case 1:
  191. case 11:
  192. d = "一型车";
  193. break;
  194. case 2:
  195. case 12:
  196. d = "二型车";
  197. break;
  198. case 3:
  199. case 13:
  200. d = "三型车";
  201. break;
  202. case 4:
  203. case 14:
  204. d = "四型车";
  205. break;
  206. case 5:
  207. case 15:
  208. d = "五型车";
  209. break;
  210. case 6:
  211. case 16:
  212. d = "六型车";
  213. break;
  214. default:
  215. d = "自定义"
  216. }
  217. r.serviceData.balance = _kcUtils2.default.byteArray2hexStr(a),
  218. r.serviceData.vehicleMode = d,
  219. r.serviceData.vehicleNumber = _kcUtils2.default.byteArray2hexStr(n)
  220. } else
  221. r.serviceCode = -3,
  222. r.serviceInfo = "获取卡片信息失败,信息长度有误";
  223. return r
  224. }
  225. function analysisCardOwnerRecord(e) {
  226. var a, r, t = _kcUtils2.default.hexStr2byteArray(e), s = {}, i = t.byteLength, e = _analysisIs9000(e);
  227. return 0 != e.serviceCode ? e : (59 == i ? (e = t.slice(2, 3),
  228. i = t.slice(3, 4),
  229. a = t.slice(4, 24),
  230. r = t.slice(24, 56),
  231. t = t.slice(56, 57),
  232. s.serviceCode = 0,
  233. s.serviceInfo = "获取持卡人信息成功",
  234. s.serviceData = {},
  235. s.serviceData.ownerId = _kcUtils2.default.byteArray2hexStr(e),
  236. s.serviceData.staffId = _kcUtils2.default.byteArray2hexStr(i),
  237. s.serviceData.ownerLicenseNumber = _kcUtils2.default.hexCharCodeToStr(_kcUtils2.default.byteArray2hexStr(r)),
  238. s.serviceData.ownerLicenseType = _kcUtils2.default.byteArray2hexStr(t),
  239. s.serviceData.ownerName = _kcUtils2.default.byteArray2hexStr(a)) : (s.serviceCode = -3,
  240. s.serviceInfo = "获取持卡人信息失败,信息长度有误"),
  241. s)
  242. }
  243. function analysisCardTransactionRecord(e) {
  244. var a = 0
  245. , r = _kcUtils2.default.hexStr2byteArray(e)
  246. , t = r.byteLength
  247. , s = {};
  248. if (4 <= t) {
  249. for (s.serviceCode = 0,
  250. s.serviceInfo = "获取交易记录信息成功",
  251. s.serviceData = {},
  252. s.serviceData.CardTransactionRecordData = []; a < t;) {
  253. var i = r[a++]
  254. , l = r[a] - 1;
  255. if (console.log("kc9000校验第" + i + "条:", r[a + l], r[a + l + 1]),
  256. 144 != r[a + l] || 0 != r[a + l + 1])
  257. return console.log("交易记录:", s),
  258. s;
  259. i = {};
  260. if (a++,
  261. i.onlineSn = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 2)),
  262. a += 2,
  263. i.overdrawLimit = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 3)),
  264. a += 3,
  265. i.transAmount = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 4)),
  266. a += 4,
  267. i.transType = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 1)),
  268. a += 1,
  269. i.terminalNo = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 6)),
  270. a += 6,
  271. i.transDate = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 4)),
  272. a += 4,
  273. i.transTime = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 3)),
  274. a = a + 3 + 2,
  275. s.serviceData.CardTransactionRecordData.push(i),
  276. "ffff" == _kcUtils2.default.byteArray2hexStr(i.onlineSn) || "0000" == _kcUtils2.default.byteArray2hexStr(i.onlineSn))
  277. return console.log("交易记录:", s),
  278. s
  279. }
  280. console.log("交易记录:", s)
  281. } else
  282. s.serviceCode = -3,
  283. s.serviceInfo = "获取交易记录失败,信息长度有误";
  284. return s
  285. }
  286. function analysisgetCardConsumeRecord(e) {
  287. var a = _kcUtils2.default.hexStr2byteArray(e)
  288. , r = {}
  289. , t = a.byteLength
  290. , s = 0;
  291. if (4 <= t) {
  292. for (r.serviceCode = 0,
  293. r.serviceInfo = "获取过站信息成功",
  294. r.serviceData = {},
  295. r.serviceData.CardConsumeRecordData = []; s < t;) {
  296. var i = a[s++]
  297. , l = a[s] - 1;
  298. if (_kcUtils2.default.showLog("kc9000校验第" + i + "条:", a[s + l], a[s + l + 1]),
  299. 144 != a[s + l] || 0 != a[s + l + 1])
  300. break;
  301. i = {};
  302. s++,
  303. i.tollRoadNetworkId = a.slice(2, 4),
  304. s += 2,
  305. i.tollStationId = a.slice(4, 6),
  306. s += 2,
  307. i.tollLaneId = a.slice(6, 7),
  308. s += 1,
  309. i.timeUnix = a.slice(7, 11),
  310. s += 4,
  311. i.vehicleModel = a.slice(11, 12),
  312. s += 1,
  313. i.passStatus = a.slice(12, 13),
  314. s += 1,
  315. i.reserve1 = a.slice(13, 22),
  316. s += 9,
  317. i.staffNo = a.slice(22, 25),
  318. s += 3,
  319. i.mtcSequenceNo = a.slice(25, 26),
  320. s += 1,
  321. i.staffNo = a.slice(26, 38),
  322. s += 12,
  323. i.mtcSequenceNo = a.slice(38, 42),
  324. s = s + 4 + 2,
  325. r.serviceData.CardConsumeRecordData.push(i),
  326. console.log("cardConsumeRecordBean", i, s)
  327. }
  328. console.log("过站信息:", r)
  329. } else
  330. r.serviceCode = -3,
  331. r.serviceInfo = "获取过站信息失败,信息长度有误";
  332. return r
  333. }
  334. function analysisInitInfo(e) {
  335. var a, r, t, s = _kcUtils2.default.hexStr2byteArray(e), i = {}, l = s.byteLength, e = _analysisIs9000(e);
  336. return 0 != e.serviceCode ? e : (20 == l ? (e = s.slice(2, 6),
  337. l = s.slice(6, 8),
  338. a = s.slice(8, 9),
  339. r = s.slice(9, 10),
  340. t = s.slice(10, 14),
  341. s = s.slice(14, 18),
  342. _kcUtils2.default.showLog("balance:", _kcUtils2.default.byteArray2hexStr(e), "pseudoRand:", _kcUtils2.default.byteArray2hexStr(t), "Mac1:", _kcUtils2.default.byteArray2hexStr(s), "CardSeq:", _kcUtils2.default.byteArray2hexStr(l)),
  343. i.serviceCode = 0,
  344. i.serviceInfo = "解析圈存初始化成功",
  345. i.serviceData = {},
  346. i.serviceData.balance = _kcUtils2.default.byteArray2hexStr(e),
  347. i.serviceData.serial = _kcUtils2.default.byteArray2hexStr(l),
  348. i.serviceData.keyVersion = _kcUtils2.default.byteArray2hexStr(a),
  349. i.serviceData.algTag = _kcUtils2.default.byteArray2hexStr(r),
  350. i.serviceData.icRandom = _kcUtils2.default.byteArray2hexStr(t),
  351. i.serviceData.mac1 = _kcUtils2.default.byteArray2hexStr(s)) : (i.serviceCode = -3,
  352. i.serviceInfo = "解析圈存初始化失败,信息长度有误"),
  353. i)
  354. }
  355. function analysisLoadCreadit(e) {
  356. var a = _kcUtils2.default.hexStr2byteArray(e)
  357. , r = {}
  358. , t = a.byteLength
  359. , e = _analysisIs9000(e);
  360. return 0 != e.serviceCode ? e : (8 == t ? (e = a.slice(2, 6),
  361. _kcUtils2.default.showLog("TAG", _kcUtils2.default.byteArray2hexStr(e)),
  362. r.serviceCode = 0,
  363. r.serviceInfo = "圈存成功",
  364. r.serviceData = {},
  365. r.serviceData.TAG = _kcUtils2.default.byteArray2hexStr(e)) : (r.serviceCode = -3,
  366. r.serviceInfo = "圈存解析失败,长度有误"),
  367. r)
  368. }
  369. function analysisgetObuSysInfo(e) {
  370. var a, r, t, s, i = _kcUtils2.default.hexStr2byteArray(e), l = {}, c = i.byteLength, e = _analysisIs9000(e);
  371. return 0 != e.serviceCode ? e : (31 == c ? (e = i.slice(2, 10),
  372. c = i.slice(10, 11),
  373. a = i.slice(11, 12),
  374. r = i.slice(12, 20),
  375. t = i.slice(20, 24),
  376. s = i.slice(24, 28),
  377. i = i.slice(28, 29),
  378. _kcUtils2.default.showLog("contractProvider", _kcUtils2.default.byteArray2hexStr(e), "contractSerialNumber", _kcUtils2.default.byteArray2hexStr(r), "issueFlag", _kcUtils2.default.byteArray2hexStr(i)),
  379. l.serviceCode = 0,
  380. l.serviceInfo = "获取OBU系统成功",
  381. l.serviceData = {},
  382. l.serviceData.contractProvider = _kcUtils2.default.byteArray2hexStr(e),
  383. l.serviceData.contractType = _kcUtils2.default.byteArray2hexStr(c),
  384. l.serviceData.contractVersion = _kcUtils2.default.byteArray2hexStr(a),
  385. l.serviceData.contractSerialNumber = _kcUtils2.default.byteArray2hexStr(r),
  386. l.serviceData.contractSignedDate = _kcUtils2.default.byteArray2hexStr(t),
  387. l.serviceData.contractExpiredDate = _kcUtils2.default.byteArray2hexStr(s),
  388. l.serviceData.issueFlag = _kcUtils2.default.byteArray2hexStr(i)) : (l.serviceCode = -1,
  389. l.serviceInfo = "OBU系统信息解析失败,长度有误"),
  390. l)
  391. }
  392. function analysisGetRand(e) {
  393. var a = _kcUtils2.default.hexStr2byteArray(e)
  394. , r = {}
  395. , t = a.byteLength
  396. , e = _analysisIs9000(e);
  397. return 0 != e.serviceCode ? e : (8 == t ? (e = a.slice(2, 6),
  398. _kcUtils2.default.showLog("rand", _kcUtils2.default.byteArray2hexStr(e)),
  399. r.serviceCode = 0,
  400. r.serviceInfo = "获取随机数成功",
  401. r.serviceData = {},
  402. r.serviceData.rand = _kcUtils2.default.byteArray2hexStr(e)) : (r.serviceCode = -1,
  403. r.serviceInfo = "获取随机数失败,长度有误"),
  404. r)
  405. }
  406. function analysisVehCipherInfo(e) {
  407. var a = _kcUtils2.default.hexStr2byteArray(e)
  408. , r = {}
  409. , t = a.byteLength
  410. , e = _analysisIs9000(e);
  411. return 0 != e.serviceCode ? e : (3 <= t ? (e = a.slice(2, t - 2),
  412. _kcUtils2.default.showLog("cipherVehInfo", _kcUtils2.default.byteArray2hexStr(e)),
  413. r.serviceCode = 0,
  414. r.serviceInfo = "获取密文车辆信息成功",
  415. r.serviceData = {},
  416. r.serviceData.cipherVehInfo = _kcUtils2.default.byteArray2hexStr(e)) : (r.serviceCode = -1,
  417. r.serviceInfo = "获取密文车辆信息失败,长度有误"),
  418. r)
  419. }
  420. function _analyzeUnpacksIntoArrays(e) {
  421. var byteArray = _kcUtils2.default.hexStr2byteArray(e),
  422. result = {},
  423. index = 0,
  424. length = byteArray.byteLength, packets = [];
  425. var parsedTLVs;
  426. if (length >= 4) {
  427. // 解析 TLV 报文
  428. parsedTLVs = parseTLV(byteArray);
  429. for (let tlv of parsedTLVs) {
  430. console.log("Unpacks " + tlv.ordinal + " 条:", tlv.len);
  431. packets.push(_kcUtils2.default.byteArray2hexStr(tlv.value));
  432. }
  433. result.serviceCode = 0;
  434. result.serviceInfo = "拆包为数组成功";
  435. } else {
  436. result.serviceCode = -2;
  437. result.serviceInfo = "拆包为数组失败,长度有误";
  438. }
  439. result.unpacksData = packets;
  440. return result;
  441. }
  442. // 获取报文的TAG、LEN和VALUE
  443. function parseTLV(data) {
  444. var results = [];
  445. var index = 0;
  446. while (index < data.length) {
  447. var result = {};
  448. // 读取 ordinal
  449. result.ordinal = data[index++];
  450. // 读取 LEN
  451. if (data[index] <= 0x80) {
  452. result.len = data[index];
  453. index += 1;
  454. } else if (data[index] === 0x81) {
  455. result.len = data[index + 1];
  456. index += 2;
  457. } else if (data[index] === 0x82) {
  458. result.len = (data[index + 1] << 8) + data[index + 2];
  459. index += 3;
  460. }
  461. // 读取 VALUE
  462. result.value = data.slice(index, index + result.len);
  463. index += result.len;
  464. results.push(result);
  465. }
  466. return results;
  467. }
  468. function _analysisIs9000(e) {
  469. var byteArray = _kcUtils2.default.hexStr2byteArray(e),
  470. result = {}, packets = [],
  471. length = byteArray.byteLength;
  472. var parsedTLVs;
  473. if (length >= 4) {
  474. // 解析 TLV 报文
  475. parsedTLVs = parseTLV(byteArray);
  476. // console.log("parsedTLVs:",parsedTLVs);
  477. for (let tlv of parsedTLVs) {
  478. let sw1 = 0, sw2 = 0;
  479. sw1 = tlv.value[tlv.len - 2];
  480. sw2 = tlv.value[tlv.len - 1];
  481. console.log("kc9000校验第" + tlv.ordinal + "条:", sw1, sw2);
  482. packets.push(_kcUtils2.default.byteArray2hexStr(tlv.value));
  483. if (sw1 != 144 || sw2 != 0) {
  484. result.serviceCode = -1;
  485. result.serviceInfo = `kc第${tlv.ordinal}包APDU非9000`;
  486. break;
  487. } else {
  488. result.serviceCode = 0;
  489. result.serviceInfo = "9000认证成功";
  490. }
  491. }
  492. } else {
  493. result.serviceCode = -2;
  494. result.serviceInfo = "9000认证失败,长度有误";
  495. }
  496. result.unpacksData = packets;
  497. return result;
  498. }
  499. function deviceInfoSuccess(l, c) {
  500. c.serviceCode = 0;
  501. c.serviceInfo = "获取设备信息成功";
  502. return l.slice(1);
  503. }
  504. function analysisDeviceInfo(e) {
  505. var t, l = _kcUtils2.default.hexStr2byteArray(e), c = {}, n = l.byteLength;
  506. console.log("获取设备信息长度:", n);
  507. c.serviceCode = -1;
  508. c.serviceInfo = "获取设备信息失败,信息长度有误";
  509. c.serviceData = {};
  510. c.serviceData.etcVehicleInfo = _kcEtcVehicleInfo.EtcVehicleInfo.create();
  511. switch (l[0]) {
  512. case 0xc0:
  513. if (17 == n) {
  514. t = deviceInfoSuccess(l, c);
  515. c.serviceData.etcVehicleInfo.obuid = _kcUtils2.default.byteArray2hexStr(t);
  516. c.serviceData.etcVehicleInfo.obuid = _kcUtils2.default.hexCharCodeToStr(c.serviceData.etcVehicleInfo.obuid);
  517. c.serviceData.etcVehicleInfo.bleDeviceInfo.deviceNumber = c.serviceData.etcVehicleInfo.obuid;
  518. console.log("device Id:", c.serviceData.etcVehicleInfo.obuid);
  519. }
  520. break;
  521. case 0xc1:
  522. if (3 == n) {
  523. t = deviceInfoSuccess(l, c);
  524. c.serviceData.etcVehicleInfo.bleDeviceInfo.versionNumber = _kcUtils2.default.byteArray2hexStr(t);
  525. console.log("versionNumber:", c.serviceData.etcVehicleInfo.bleDeviceInfo.versionNumber);
  526. }
  527. break;
  528. case 0xc2:
  529. if (2 == n) {
  530. t = deviceInfoSuccess(l, c);
  531. c.serviceData.etcVehicleInfo.bleDeviceInfo.batteryLevel = _kcUtils2.default.byteArray2hexStr(t);
  532. console.log("batteryStatus:", c.serviceData.etcVehicleInfo.bleDeviceInfo.batteryLevel);
  533. }
  534. break;
  535. case 0xc3:
  536. break;
  537. case 0xc4:
  538. break;
  539. case 0xc5:
  540. if (9 == n) {
  541. t = deviceInfoSuccess(l, c);
  542. c.serviceData.etcVehicleInfo.bleDeviceInfo.contractNumber = _kcUtils2.default.byteArray2hexStr(t);
  543. console.log("contractNumber:", c.serviceData.etcVehicleInfo.bleDeviceInfo.contractNumber);
  544. }
  545. break;
  546. case 0xc6:
  547. if (5 == n) {
  548. t = deviceInfoSuccess(l, c);
  549. c.serviceData.etcVehicleInfo.bleDeviceInfo.obuMca = _kcUtils2.default.byteArray2hexStr(t);
  550. console.log("obuMca:", c.serviceData.etcVehicleInfo.bleDeviceInfo.obuMca);
  551. }
  552. break;
  553. case 0xc7:
  554. break;
  555. case 0xc8:
  556. if (5 == n) {
  557. t = deviceInfoSuccess(l, c);
  558. c.serviceData.etcVehicleInfo.bleDeviceInfo.obuVersion = _kcUtils2.default.byteArray2hexStr(t);
  559. console.log("obuVersion:", c.serviceData.etcVehicleInfo.bleDeviceInfo.obuVersion);
  560. }
  561. break;
  562. case 0xc9:
  563. if (2 == n) {
  564. t = deviceInfoSuccess(l, c);
  565. c.serviceData.etcVehicleInfo.bleDeviceInfo.deviceTamperStatus = t[0];
  566. c.serviceData.etcVehicleInfo.obuRemoveStatus = _kcUtils2.default.byteArray2hexStr(t);
  567. c.serviceData.etcVehicleInfo.isRemove = c.serviceData.etcVehicleInfo.obuRemoveStatus == "00" ? true : false;
  568. console.log("obuRemoveStatus:", c.serviceData.etcVehicleInfo.obuRemoveStatus);
  569. }
  570. break;
  571. case 0xca:
  572. if (2 == n) {
  573. t = deviceInfoSuccess(l, c);
  574. c.serviceData.etcVehicleInfo.bleDeviceInfo.disassemble = t[0];
  575. console.log("disassemble:", c.serviceData.etcVehicleInfo.bleDeviceInfo.disassemble);
  576. }
  577. break;
  578. default:
  579. c.serviceCode = -2;
  580. c.serviceInfo = "获取设备信息失败,指令类型有误";
  581. console.log("kc获取设备信息失败:", "指令类型有误");
  582. break;
  583. }
  584. return c;
  585. }
  586. function analysisCustomDIR(e, replyContent = 0x00) {
  587. var l = _kcUtils2.default.hexStr2byteArray(e), c = {}, n = l.byteLength;
  588. console.log("n + ", n);
  589. c.serviceCode = 0;
  590. c.serviceInfo = "获取自定义信息成功";
  591. c.serviceData = {};
  592. c.serviceData.etcVehicleInfo = _kcEtcVehicleInfo.EtcVehicleInfo.create();
  593. switch (l[0]) {
  594. case 0xE5:
  595. break;
  596. case 0xE6:
  597. c.serviceData.etcVehicleInfo.customDirectives.icStuckStatus = e.slice(2, 4);
  598. c.serviceData.etcVehicleInfo.customDirectives.switch58GANTStatus = e.slice(4, 6);
  599. c.serviceData.etcVehicleInfo.customDirectives.voiceSupported = e.slice(6, 8);
  600. c.serviceData.etcVehicleInfo.customDirectives.batteryLevel = parseInt(e.slice(8, 10), 16);
  601. break;
  602. default:
  603. c.serviceCode = -2;
  604. c.serviceInfo = "获取自定义信息失败,指令类型有误";
  605. console.error("kc获取自定义信息失败:", "指令类型有误");
  606. }
  607. return c;
  608. }
  609. module.exports = {
  610. analysisCardInfo: analysisCardInfo,
  611. analysisCardFile: analysisCardFile,
  612. analysisDeviceInfo: analysisDeviceInfo,
  613. analysisInitInfo: analysisInitInfo,
  614. analysisLoadCreadit: analysisLoadCreadit,
  615. analysisgetObuSysInfo: analysisgetObuSysInfo,
  616. analysisGetRand: analysisGetRand,
  617. _analysisIs9000: _analysisIs9000,
  618. _analyzeUnpacksIntoArrays: _analyzeUnpacksIntoArrays,
  619. analysisVehCipherInfo: analysisVehCipherInfo,
  620. analysisCardOwnerRecord: analysisCardOwnerRecord,
  621. analysisCardTransactionRecord: analysisCardTransactionRecord,
  622. analysisgetCardConsumeRecord: analysisgetCardConsumeRecord,
  623. analysisinitIC: analysisinitIC,
  624. analysisCardbalance: analysisCardbalance,
  625. analysisCustomDIR: analysisCustomDIR
  626. };