Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

wjDataAnalysis.js 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. "use strict";
  2. var _wjUtils = require("./wjUtils.js"),
  3. _wjUtils2 = _interopRequireDefault(_wjUtils);
  4. function _interopRequireDefault(e) {
  5. return e && e.__esModule ? e : {
  6. default: e
  7. }
  8. }
  9. function analysisinitIC(e) {
  10. var r = _wjUtils2.default.hexStr2byteArray(e),
  11. t = {};
  12. return 73 == r.byteLength ? (0 == (128 & r[1]) ? (t.serviceCode = 0, t.serviceInfo = "初始化成功") : 128 == (128 & r[
  13. 1]) ? (t.serviceCode = 1, t.serviceInfo = "初始化失败") : (t.serviceCode = -3, t.serviceInfo = "初始化异常"), t
  14. .serviceData = {}, t.serviceData.dataBuff = e) : (t.serviceCode = -2, t.serviceInfo = "获取卡片初始化失败,信息长度有误"), t
  15. }
  16. function analysisCardInfo(e) {
  17. var r = _wjUtils2.default.hexStr2byteArray(e),
  18. t = {},
  19. a = r.byteLength,
  20. s = _analysisIs9000(e);
  21. if (0 != s.serviceCode) return t = s;
  22. if (55 != a) return t.serviceCode = -3, t.serviceInfo = "获取卡片信息失败,信息长度有误", t;
  23. var i = r.slice(2, 10),
  24. l = r.slice(10, 11),
  25. c = (r.slice(11, 12), r.slice(12, 14)),
  26. n = r.slice(14, 22),
  27. o = r.slice(22, 26),
  28. y = (r.slice(26, 30), r.slice(30, 42)),
  29. d = r.slice(42, 43),
  30. f = r.slice(43, 44),
  31. u = r.slice(44, 45),
  32. v = r.slice(49, 53),
  33. w = parseInt((255 & v[0]) << 24);
  34. return w += parseInt((255 & v[1]) << 16), w += parseInt((255 & v[2]) << 8), w += parseInt(255 & v[3]), _wjUtils2
  35. .default.showLog("cardIssuerID:", _wjUtils2.default.byteArray2hexStr(i), "bindedPlate", _wjUtils2.default
  36. .byteArray2hexStr(y), "balance:", w), t.serviceCode = 0, t.serviceInfo = "获取卡片信息成功", t.serviceData = {}, t
  37. .serviceData.cardIssuerID = _wjUtils2.default.byteArray2hexStr(i), t.serviceData.cardType = _wjUtils2.default
  38. .byteArray2hexStr(l), t.serviceData.roadswebID = _wjUtils2.default.byteArray2hexStr(c), t.serviceData.cardNo =
  39. _wjUtils2.default.byteArray2hexStr(n), t.serviceData.SignedDate = _wjUtils2.default.byteArray2hexStr(o), t
  40. .serviceData.bindedPlate = _wjUtils2.default.byteArray2hexStr(y), t.serviceData.userType = _wjUtils2.default
  41. .byteArray2hexStr(d), t.serviceData.vehColor = _wjUtils2.default.byteArray2hexStr(f), t.serviceData.vehType =
  42. _wjUtils2.default.byteArray2hexStr(u), t.serviceData.intbalance = w, t
  43. }
  44. function analysisCardOwnerRecord(e) {
  45. var r = _wjUtils2.default.hexStr2byteArray(e),
  46. t = {},
  47. a = r.byteLength,
  48. s = _analysisIs9000(e);
  49. if (0 != s.serviceCode) return t = s;
  50. if (59 != a) return t.serviceCode = -3, t.serviceInfo = "获取持卡人信息失败,信息长度有误", t;
  51. var i = r.slice(2, 3),
  52. l = r.slice(3, 4),
  53. c = r.slice(4, 24),
  54. n = r.slice(24, 56),
  55. o = r.slice(56, 57);
  56. return _wjUtils2.default.showLog("ownerName:", _wjUtils2.default.byteArray2hexStr(c), "ownerLicenseNumber:",
  57. _wjUtils2.default.byteArray2hexStr(n), "ownerLicenseType:", o), t.serviceCode = 0, t.serviceInfo =
  58. "获取持卡人信息成功", t.serviceData = {}, t.serviceData.ownerId = _wjUtils2.default.byteArray2hexStr(i), t.serviceData
  59. .staffId = _wjUtils2.default.byteArray2hexStr(l), t.serviceData.ownerName = _wjUtils2.default.byteArray2hexStr(
  60. c), t.serviceData.ownerLicenseNumber = _wjUtils2.default.byteArray2hexStr(n), t.serviceData
  61. .ownerLicenseType = _wjUtils2.default.byteArray2hexStr(o), t
  62. }
  63. function analysisCardTransactionRecord(e) {
  64. var r = 0,
  65. t = _wjUtils2.default.hexStr2byteArray(e),
  66. a = t.byteLength,
  67. s = {};
  68. if (4 <= a) {
  69. for (s.serviceCode = 0, s.serviceInfo = "获取交易记录信息成功", s.serviceData = {}, s.serviceData
  70. .CardTransactionRecordData = []; r < a;) {
  71. var i = t[r++],
  72. l = t[r] - 1;
  73. if (console.log("WJ9000校验第" + i + "条:", t[r + l], t[r + l + 1]), 144 != t[r + l] || 0 != t[r + l + 1])
  74. return console.log("交易记录:", s), s;
  75. var c = {};
  76. if (r++, c.onlineSn = _wjUtils2.default.byteArray2hexStr(t.slice(r, r + 2)), r += 2, c.overdrawLimit =
  77. _wjUtils2.default.byteArray2hexStr(t.slice(r, r + 3)), r += 3, c.transAmount = _wjUtils2.default
  78. .byteArray2hexStr(t.slice(r, r + 4)), r += 4, c.transType = _wjUtils2.default.byteArray2hexStr(t.slice(
  79. r, r + 1)), r += 1, c.terminalNo = _wjUtils2.default.byteArray2hexStr(t.slice(r, r + 6)), r += 6, c
  80. .transDate = _wjUtils2.default.byteArray2hexStr(t.slice(r, r + 4)), r += 4, c.transTime = _wjUtils2
  81. .default.byteArray2hexStr(t.slice(r, r + 3)), r += 3, r += 2, s.serviceData.CardTransactionRecordData
  82. .push(c), "ffff" == _wjUtils2.default.byteArray2hexStr(c.onlineSn) || "0000" == _wjUtils2.default
  83. .byteArray2hexStr(c.onlineSn)) return console.log("交易记录:", s), s
  84. }
  85. return console.log("交易记录:", s), s
  86. }
  87. return s.serviceCode = -3, s.serviceInfo = "获取交易记录失败,信息长度有误", s
  88. }
  89. function analysisgetCardConsumeRecord(e) {
  90. var r = _wjUtils2.default.hexStr2byteArray(e),
  91. t = {},
  92. a = r.byteLength,
  93. s = 0;
  94. if (4 <= a) {
  95. for (t.serviceCode = 0, t.serviceInfo = "获取过站信息成功", t.serviceData = {}, t.serviceData
  96. .CardConsumeRecordData = []; s < a;) {
  97. var i = r[s++],
  98. l = r[s] - 1;
  99. if (_wjUtils2.default.showLog("WJ9000校验第" + i + "条:", r[s + l], r[s + l + 1]), 144 != r[s + l] || 0 != r[s +
  100. l + 1]) break;
  101. var c = {};
  102. s++, c.tollRoadNetworkId = r.slice(2, 4), s += 2, c.tollStationId = r.slice(4, 6), s += 2, c.tollLaneId = r
  103. .slice(6, 7), s += 1, c.timeUnix = r.slice(7, 11), s += 4, c.vehicleModel = r.slice(11, 12), s += 1, c
  104. .passStatus = r.slice(12, 13), s += 1, c.reserve1 = r.slice(13, 22), s += 9, c.staffNo = r.slice(22,
  105. 25), s += 3, c.mtcSequenceNo = r.slice(25, 26), s += 1, c.staffNo = r.slice(26, 38), s += 12, c
  106. .mtcSequenceNo = r.slice(38, 42), s += 4, s += 2, t.serviceData.CardConsumeRecordData.push(c), console
  107. .log("cardConsumeRecordBean", c, s)
  108. }
  109. return console.log("过站信息:", t), t
  110. }
  111. return t.serviceCode = -3, t.serviceInfo = "获取过站信息失败,信息长度有误", t
  112. }
  113. function analysisInitInfo(e) {
  114. var r = _wjUtils2.default.hexStr2byteArray(e),
  115. t = {},
  116. a = r.byteLength,
  117. s = _analysisIs9000(e);
  118. if (0 != s.serviceCode) return t = s;
  119. if (20 != a) return t.serviceCode = -3, t.serviceInfo = "解析圈存初始化失败,信息长度有误", t;
  120. var i = r.slice(2, 6),
  121. l = r.slice(6, 8),
  122. c = r.slice(8, 9),
  123. n = r.slice(9, 10),
  124. o = r.slice(10, 14),
  125. y = r.slice(14, 18),
  126. d = parseInt((255 & i[0]) << 24);
  127. return d += parseInt((255 & i[1]) << 16), d += parseInt((255 & i[2]) << 8), d += parseInt(255 & i[3]), _wjUtils2
  128. .default.showLog("intbalance:", d, "pseudoRand:", _wjUtils2.default.byteArray2hexStr(o), "Mac1:", _wjUtils2
  129. .default.byteArray2hexStr(y), "CardSeq:", _wjUtils2.default.byteArray2hexStr(l)), t.serviceCode = 0, t
  130. .serviceInfo = "解析圈存初始化成功", t.serviceData = {}, t.serviceData.intbalance = d, t.serviceData.CardSeq = _wjUtils2
  131. .default.byteArray2hexStr(l), t.serviceData.keyVersion = _wjUtils2.default.byteArray2hexStr(c), t.serviceData
  132. .algTag = _wjUtils2.default.byteArray2hexStr(n), t.serviceData.pseudoRand = _wjUtils2.default.byteArray2hexStr(
  133. o), t.serviceData.Mac1 = _wjUtils2.default.byteArray2hexStr(y), t
  134. }
  135. function analysisLoadCreadit(e) {
  136. var r = _wjUtils2.default.hexStr2byteArray(e),
  137. t = {},
  138. a = r.byteLength,
  139. s = _analysisIs9000(e);
  140. if (0 != s.serviceCode) return t = s;
  141. if (8 != a) return t.serviceCode = -3, t.serviceInfo = "圈存解析失败,长度有误", t;
  142. var i = r.slice(2, 6);
  143. return _wjUtils2.default.showLog("TAG", _wjUtils2.default.byteArray2hexStr(i)), t.serviceCode = 0, t.serviceInfo =
  144. "圈存成功", t.serviceData = {}, t.serviceData.TAG = _wjUtils2.default.byteArray2hexStr(i), t
  145. }
  146. function analysisgetObuSysInfo(e) {
  147. var r = _wjUtils2.default.hexStr2byteArray(e),
  148. t = {},
  149. a = r.byteLength,
  150. s = _analysisIs9000(e);
  151. if (0 != s.serviceCode) return t = s;
  152. if (31 != a) return t.serviceCode = -1, t.serviceInfo = "OBU系统信息解析失败,长度有误", t;
  153. var i = r.slice(2, 10),
  154. l = r.slice(10, 11),
  155. c = r.slice(11, 12),
  156. n = r.slice(12, 20),
  157. o = r.slice(20, 24),
  158. y = r.slice(24, 28),
  159. d = r.slice(28, 29);
  160. return _wjUtils2.default.showLog("contractProvider", _wjUtils2.default.byteArray2hexStr(i), "contractSerialNumber",
  161. _wjUtils2.default.byteArray2hexStr(n), "issueFlag", _wjUtils2.default.byteArray2hexStr(d)), t.serviceCode =
  162. 0, t.serviceInfo = "获取OBU系统成功", t.serviceData = {}, t.serviceData.contractProvider = _wjUtils2.default
  163. .byteArray2hexStr(i), t.serviceData.contractType = _wjUtils2.default.byteArray2hexStr(l), t.serviceData
  164. .contractVersion = _wjUtils2.default.byteArray2hexStr(c), t.serviceData.contractSerialNumber = _wjUtils2.default
  165. .byteArray2hexStr(n), t.serviceData.contractSignedDate = _wjUtils2.default.byteArray2hexStr(o), t.serviceData
  166. .contractExpiredDate = _wjUtils2.default.byteArray2hexStr(y), t.serviceData.issueFlag = _wjUtils2.default
  167. .byteArray2hexStr(d), t
  168. }
  169. function analysisGetRand(e) {
  170. var r = _wjUtils2.default.hexStr2byteArray(e),
  171. t = {},
  172. a = r.byteLength,
  173. s = _analysisIs9000(e);
  174. if (0 != s.serviceCode) return t = s;
  175. if (8 != a) return t.serviceCode = -1, t.serviceInfo = "获取随机数失败,长度有误", t;
  176. var i = r.slice(2, 6);
  177. return _wjUtils2.default.showLog("rand", _wjUtils2.default.byteArray2hexStr(i)), t.serviceCode = 0, t.serviceInfo =
  178. "获取随机数成功", t.serviceData = {}, t.serviceData.rand = _wjUtils2.default.byteArray2hexStr(i), t
  179. }
  180. function analysisVehCipherInfo(e) {
  181. var r = _wjUtils2.default.hexStr2byteArray(e),
  182. t = {},
  183. a = r.byteLength,
  184. s = _analysisIs9000(e);
  185. if (0 != s.serviceCode) return t = s;
  186. if (3 <= a) {
  187. var i = r.slice(2, a - 2);
  188. return _wjUtils2.default.showLog("cipherVehInfo", _wjUtils2.default.byteArray2hexStr(i)), t.serviceCode = 0, t
  189. .serviceInfo = "获取密文车辆信息成功", t.serviceData = {}, t.serviceData.cipherVehInfo = _wjUtils2.default
  190. .byteArray2hexStr(i), t
  191. }
  192. return t.serviceCode = -1, t.serviceInfo = "获取密文车辆信息失败,长度有误", t
  193. }
  194. function _analysisIs9000(e) {
  195. var r = _wjUtils2.default.hexStr2byteArray(e),
  196. t = {},
  197. a = 0,
  198. s = r.byteLength;
  199. if (4 <= s) {
  200. for (; a < s;) {
  201. var i = r[a++];
  202. if (a += r[a] - 1, _wjUtils2.default.showLog("WJ9000校验第" + i + "条:", r[a], r[a + 1]), 144 != r[a] || 0 != r[
  203. a + 1]) {
  204. t.serviceCode = -1, t.serviceInfo = "WJ第" + i + "包APDU非9000";
  205. break
  206. }
  207. a += 2, t.serviceCode = 0, t.serviceInfo = "9000认证成功"
  208. }
  209. return t
  210. }
  211. return t.serviceCode = -2, t.serviceInfo = "9000认证失败,长度有误", t
  212. }
  213. function analysisDeviceInfo(e) {
  214. var r = _wjUtils2.default.hexStr2byteArray(e),
  215. t = {},
  216. a = 0,
  217. s = r.byteLength,
  218. i = r[a++];
  219. switch (_wjUtils2.default.showLog(e), i) {
  220. case 192:
  221. if (17 != s) return t.serviceCode = -1, t.serviceInfo = "获取设备信息失败,信息长度有误", t;
  222. var l = r.slice(1);
  223. return _wjUtils2.default.showLog("deviceSN:", _wjUtils2.default.byteArray2hexStr(l)), t.serviceCode = 0, t
  224. .serviceInfo = "获取设备信息成功", t.serviceData = {}, t.serviceData.deviceSN = _wjUtils2.default
  225. .byteArray2hexStr(l), t;
  226. case 204:
  227. if (17 != s) return t.serviceCode = -1, t.serviceInfo = "获取设备信息失败,信息长度有误", t;
  228. var c = r.slice(1, 3),
  229. n = r.slice(3, 4),
  230. o = (l = r.slice(4, 12), r.slice(12, 16)),
  231. y = r.slice(16);
  232. return _wjUtils2.default.showLog("deviceSN:", _wjUtils2.default.byteArray2hexStr(l), "bleMac:", _wjUtils2
  233. .default.byteArray2hexStr(o), "flag:", _wjUtils2.default.byteArray2hexStr(y)), t.serviceCode = 0, t
  234. .serviceInfo = "获取设备信息成功", t.serviceData = {}, t.serviceData.verId = _wjUtils2.default.byteArray2hexStr(
  235. c), t.serviceData.battery = _wjUtils2.default.byteArray2hexStr(n), t.serviceData.deviceSN =
  236. _wjUtils2.default.byteArray2hexStr(l), t.serviceData.bleMac = _wjUtils2.default.byteArray2hexStr(o), t
  237. .serviceData.flag = y, t;
  238. default:
  239. return t.serviceCode = -2, t.serviceInfo = "获取设备信息失败,指令类型有误", _wjUtils2.default.showError("WJ获取设备信息失败:",
  240. "指令类型有误"), t
  241. }
  242. }
  243. module.exports = {
  244. analysisCardInfo: analysisCardInfo,
  245. analysisDeviceInfo: analysisDeviceInfo,
  246. analysisInitInfo: analysisInitInfo,
  247. analysisLoadCreadit: analysisLoadCreadit,
  248. analysisgetObuSysInfo: analysisgetObuSysInfo,
  249. analysisGetRand: analysisGetRand,
  250. _analysisIs9000: _analysisIs9000,
  251. analysisVehCipherInfo: analysisVehCipherInfo,
  252. analysisCardOwnerRecord: analysisCardOwnerRecord,
  253. analysisCardTransactionRecord: analysisCardTransactionRecord,
  254. analysisgetCardConsumeRecord: analysisgetCardConsumeRecord,
  255. analysisinitIC: analysisinitIC
  256. };