"use strict"; var _kcUtils = require("./kcUtils.js") , _kcUtils2 = _interopRequireDefault(_kcUtils); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e } } function analysisinitIC(e) { var a = _kcUtils2.default.hexStr2byteArray(e) , r = {}; return 73 == a.byteLength ? (0 == (128 & a[1]) ? (r.serviceCode = 0, r.serviceInfo = "初始化成功") : 128 == (128 & a[1]) ? (r.serviceCode = 1, r.serviceInfo = "初始化失败") : (r.serviceCode = -3, r.serviceInfo = "初始化异常"), r.serviceData = {}, r.serviceData.dataBuff = e) : (r.serviceCode = -2, r.serviceInfo = "获取卡片初始化失败,信息长度有误"), r } function analysisCardbalance(e) { if (0 != _analysisIs9000(e).serviceCode) return e = _kcUtils2.default.byteArray2hexStr(e), console.log(e), e } function analysisCardInfo(e) { var a = _kcUtils2.default.hexStr2byteArray(e) , r = {} , t = a.byteLength , e = _analysisIs9000(e); if (0 != e.serviceCode) return r = e; if (55 == t) { a.slice(2, 10); var e = a.slice(10, 11) , t = a.slice(11, 12) , s = a.slice(12, 14) , i = a.slice(14, 22) , l = a.slice(22, 26) , c = a.slice(26, 30) , n = a.slice(30, 42) , o = a.slice(42, 43) , y = a.slice(43, 44) , d = a.slice(44, 45) , a = a.slice(49, 53) , f = (r.serviceCode = 0, r.serviceInfo = "获取卡片信息成功", r.serviceData = {}, r.serviceData.cardId = _kcUtils2.default.byteArray2hexStr(s) + _kcUtils2.default.byteArray2hexStr(i), Number(e.toString())); switch (f) { case 0: f = "正常通行卡"; break; case 1: f = "测试通行卡"; break; case 2: f = "预编码通行卡"; break; case 3: f = "公务卡"; break; case 4: f = "预付卡"; break; case 5: f = "电子标签"; break; case 21: f = "年/月票卡"; break; case 22: f = "储值卡"; break; case 23: f = "记账卡"; break; case 24: f = "PSAM卡"; break; case 25: f = "ISAM卡"; break; case 51: f = "收费员工作卡"; break; case 52: f = "值班员工作卡"; break; case 53: f = "维修员工作卡"; break; case 54: f = "维护员工作卡"; break; case 55: f = "高级维护员卡" } 6 <= f && f <= 20 ? f = "自定义" : 26 <= f && f <= 50 && (f = "保留"), r.serviceData.cardType = f, r.serviceData.cardVersion = _kcUtils2.default.byteArray2hexStr(t), r.serviceData.expiredDate = _kcUtils2.default.byteArray2hexStr(c); var v = _kcUtils2.default.byteArray2hexStr(y); switch (v) { case "00": v = "蓝色"; break; case "01": v = "黄色"; break; case "02": v = "黑色"; break; case "03": v = "白色"; break; case "04": case "05": v = "渐变绿"; break; case "ff": v = "未知"; break; default: v = "保留" } switch (r.serviceData.plateColor = v, r.serviceData.provider = "山东", r.serviceData.SignedDate = _kcUtils2.default.byteArray2hexStr(l), o = Number(o.toString())) { case 0: o = "普通车"; break; case 6: o = "公务车"; break; case 8: o = "军警车"; break; case 10: o = "紧急车"; break; case 12: o = "免费"; break; case 14: o = "车队"; break; default: o = 0 < o && o <= 20 ? "自定义" : "保留" } switch (r.serviceData.userType = o, d = Number(d.toString())) { case 1: case 11: d = "一型车"; break; case 2: case 12: d = "二型车"; break; case 3: case 13: d = "三型车"; break; case 4: case 14: d = "四型车"; break; case 5: case 15: d = "五型车"; break; case 6: case 16: d = "六型车"; break; default: d = "自定义" } r.serviceData.balance = _kcUtils2.default.byteArray2hexStr(a), r.serviceData.vehicleMode = d, r.serviceData.vehicleNumber = _kcUtils2.default.byteArray2hexStr(n) } else r.serviceCode = -3, r.serviceInfo = "获取卡片信息失败,信息长度有误"; return r } function analysisCardOwnerRecord(e) { var a, r, t = _kcUtils2.default.hexStr2byteArray(e), s = {}, i = t.byteLength, e = _analysisIs9000(e); return 0 != e.serviceCode ? e : (59 == i ? (e = t.slice(2, 3), i = t.slice(3, 4), a = t.slice(4, 24), r = t.slice(24, 56), t = t.slice(56, 57), s.serviceCode = 0, s.serviceInfo = "获取持卡人信息成功", s.serviceData = {}, s.serviceData.ownerId = _kcUtils2.default.byteArray2hexStr(e), s.serviceData.staffId = _kcUtils2.default.byteArray2hexStr(i), s.serviceData.ownerLicenseNumber = _kcUtils2.default.hexCharCodeToStr(_kcUtils2.default.byteArray2hexStr(r)), s.serviceData.ownerLicenseType = _kcUtils2.default.byteArray2hexStr(t), s.serviceData.ownerName = _kcUtils2.default.byteArray2hexStr(a)) : (s.serviceCode = -3, s.serviceInfo = "获取持卡人信息失败,信息长度有误"), s) } function analysisCardTransactionRecord(e) { var a = 0 , r = _kcUtils2.default.hexStr2byteArray(e) , t = r.byteLength , s = {}; if (4 <= t) { for (s.serviceCode = 0, s.serviceInfo = "获取交易记录信息成功", s.serviceData = {}, s.serviceData.CardTransactionRecordData = []; a < t;) { var i = r[a++] , l = r[a] - 1; if (console.log("kc9000校验第" + i + "条:", r[a + l], r[a + l + 1]), 144 != r[a + l] || 0 != r[a + l + 1]) return console.log("交易记录:", s), s; i = {}; if (a++, i.onlineSn = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 2)), a += 2, i.overdrawLimit = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 3)), a += 3, i.transAmount = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 4)), a += 4, i.transType = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 1)), a += 1, i.terminalNo = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 6)), a += 6, i.transDate = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 4)), a += 4, i.transTime = _kcUtils2.default.byteArray2hexStr(r.slice(a, a + 3)), a = a + 3 + 2, s.serviceData.CardTransactionRecordData.push(i), "ffff" == _kcUtils2.default.byteArray2hexStr(i.onlineSn) || "0000" == _kcUtils2.default.byteArray2hexStr(i.onlineSn)) return console.log("交易记录:", s), s } console.log("交易记录:", s) } else s.serviceCode = -3, s.serviceInfo = "获取交易记录失败,信息长度有误"; return s } function analysisgetCardConsumeRecord(e) { var a = _kcUtils2.default.hexStr2byteArray(e) , r = {} , t = a.byteLength , s = 0; if (4 <= t) { for (r.serviceCode = 0, r.serviceInfo = "获取过站信息成功", r.serviceData = {}, r.serviceData.CardConsumeRecordData = []; s < t;) { var i = a[s++] , l = a[s] - 1; if (_kcUtils2.default.showLog("kc9000校验第" + i + "条:", a[s + l], a[s + l + 1]), 144 != a[s + l] || 0 != a[s + l + 1]) break; i = {}; s++, i.tollRoadNetworkId = a.slice(2, 4), s += 2, i.tollStationId = a.slice(4, 6), s += 2, i.tollLaneId = a.slice(6, 7), s += 1, i.timeUnix = a.slice(7, 11), s += 4, i.vehicleModel = a.slice(11, 12), s += 1, i.passStatus = a.slice(12, 13), s += 1, i.reserve1 = a.slice(13, 22), s += 9, i.staffNo = a.slice(22, 25), s += 3, i.mtcSequenceNo = a.slice(25, 26), s += 1, i.staffNo = a.slice(26, 38), s += 12, i.mtcSequenceNo = a.slice(38, 42), s = s + 4 + 2, r.serviceData.CardConsumeRecordData.push(i), console.log("cardConsumeRecordBean", i, s) } console.log("过站信息:", r) } else r.serviceCode = -3, r.serviceInfo = "获取过站信息失败,信息长度有误"; return r } function analysisInitInfo(e) { var a, r, t, s = _kcUtils2.default.hexStr2byteArray(e), i = {}, l = s.byteLength, e = _analysisIs9000(e); return 0 != e.serviceCode ? e : (20 == l ? (e = s.slice(2, 6), l = s.slice(6, 8), a = s.slice(8, 9), r = s.slice(9, 10), t = s.slice(10, 14), s = s.slice(14, 18), _kcUtils2.default.showLog("balance:", _kcUtils2.default.byteArray2hexStr(e), "pseudoRand:", _kcUtils2.default.byteArray2hexStr(t), "Mac1:", _kcUtils2.default.byteArray2hexStr(s), "CardSeq:", _kcUtils2.default.byteArray2hexStr(l)), i.serviceCode = 0, i.serviceInfo = "解析圈存初始化成功", i.serviceData = {}, i.serviceData.balance = _kcUtils2.default.byteArray2hexStr(e), i.serviceData.serial = _kcUtils2.default.byteArray2hexStr(l), i.serviceData.keyVersion = _kcUtils2.default.byteArray2hexStr(a), i.serviceData.algTag = _kcUtils2.default.byteArray2hexStr(r), i.serviceData.icRandom = _kcUtils2.default.byteArray2hexStr(t), i.serviceData.mac1 = _kcUtils2.default.byteArray2hexStr(s)) : (i.serviceCode = -3, i.serviceInfo = "解析圈存初始化失败,信息长度有误"), i) } function analysisLoadCreadit(e) { var a = _kcUtils2.default.hexStr2byteArray(e) , r = {} , t = a.byteLength , e = _analysisIs9000(e); return 0 != e.serviceCode ? e : (8 == t ? (e = a.slice(2, 6), _kcUtils2.default.showLog("TAG", _kcUtils2.default.byteArray2hexStr(e)), r.serviceCode = 0, r.serviceInfo = "圈存成功", r.serviceData = {}, r.serviceData.TAG = _kcUtils2.default.byteArray2hexStr(e)) : (r.serviceCode = -3, r.serviceInfo = "圈存解析失败,长度有误"), r) } function analysisgetObuSysInfo(e) { var a, r, t, s, i = _kcUtils2.default.hexStr2byteArray(e), l = {}, c = i.byteLength, e = _analysisIs9000(e); return 0 != e.serviceCode ? e : (31 == c ? (e = i.slice(2, 10), c = i.slice(10, 11), a = i.slice(11, 12), r = i.slice(12, 20), t = i.slice(20, 24), s = i.slice(24, 28), i = i.slice(28, 29), _kcUtils2.default.showLog("contractProvider", _kcUtils2.default.byteArray2hexStr(e), "contractSerialNumber", _kcUtils2.default.byteArray2hexStr(r), "issueFlag", _kcUtils2.default.byteArray2hexStr(i)), l.serviceCode = 0, l.serviceInfo = "获取OBU系统成功", l.serviceData = {}, l.serviceData.contractProvider = _kcUtils2.default.byteArray2hexStr(e), l.serviceData.contractType = _kcUtils2.default.byteArray2hexStr(c), l.serviceData.contractVersion = _kcUtils2.default.byteArray2hexStr(a), l.serviceData.contractSerialNumber = _kcUtils2.default.byteArray2hexStr(r), l.serviceData.contractSignedDate = _kcUtils2.default.byteArray2hexStr(t), l.serviceData.contractExpiredDate = _kcUtils2.default.byteArray2hexStr(s), l.serviceData.issueFlag = _kcUtils2.default.byteArray2hexStr(i)) : (l.serviceCode = -1, l.serviceInfo = "OBU系统信息解析失败,长度有误"), l) } function analysisGetRand(e) { var a = _kcUtils2.default.hexStr2byteArray(e) , r = {} , t = a.byteLength , e = _analysisIs9000(e); return 0 != e.serviceCode ? e : (8 == t ? (e = a.slice(2, 6), _kcUtils2.default.showLog("rand", _kcUtils2.default.byteArray2hexStr(e)), r.serviceCode = 0, r.serviceInfo = "获取随机数成功", r.serviceData = {}, r.serviceData.rand = _kcUtils2.default.byteArray2hexStr(e)) : (r.serviceCode = -1, r.serviceInfo = "获取随机数失败,长度有误"), r) } function analysisVehCipherInfo(e) { var a = _kcUtils2.default.hexStr2byteArray(e) , r = {} , t = a.byteLength , e = _analysisIs9000(e); return 0 != e.serviceCode ? e : (3 <= t ? (e = a.slice(2, t - 2), _kcUtils2.default.showLog("cipherVehInfo", _kcUtils2.default.byteArray2hexStr(e)), r.serviceCode = 0, r.serviceInfo = "获取密文车辆信息成功", r.serviceData = {}, r.serviceData.cipherVehInfo = _kcUtils2.default.byteArray2hexStr(e)) : (r.serviceCode = -1, r.serviceInfo = "获取密文车辆信息失败,长度有误"), r) } function _analyzeUnpacksIntoArrays(e) { var byteArray = _kcUtils2.default.hexStr2byteArray(e), result = {}, index = 0, length = byteArray.byteLength, packets = []; var parsedTLVs; if (length >= 4) { // 解析 TLV 报文 parsedTLVs = parseTLV(byteArray); for (let tlv of parsedTLVs) { console.log("Unpacks " + tlv.ordinal + " 条:", tlv.len); packets.push(_kcUtils2.default.byteArray2hexStr(tlv.value)); } result.serviceCode = 0; result.serviceInfo = "拆包为数组成功"; } else { result.serviceCode = -2; result.serviceInfo = "拆包为数组失败,长度有误"; } result.unpacksData = packets; return result; } // 获取报文的TAG、LEN和VALUE function parseTLV(data) { var results = []; var index = 0; while (index < data.length) { var result = {}; // 读取 ordinal result.ordinal = data[index++]; // 读取 LEN if (data[index] <= 0x80) { result.len = data[index]; index += 1; } else if (data[index] === 0x81) { result.len = data[index + 1]; index += 2; } else if (data[index] === 0x82) { result.len = (data[index + 1] << 8) + data[index + 2]; index += 3; } // 读取 VALUE result.value = data.slice(index, index + result.len); index += result.len; results.push(result); } return results; } function _analysisIs9000(e) { var byteArray = _kcUtils2.default.hexStr2byteArray(e), result = {}, packets = [], length = byteArray.byteLength; var parsedTLVs; if (length >= 4) { // 解析 TLV 报文 parsedTLVs = parseTLV(byteArray); // console.log("parsedTLVs:",parsedTLVs); for (let tlv of parsedTLVs) { let sw1 = 0, sw2 = 0; sw1 = tlv.value[tlv.len - 2]; sw2 = tlv.value[tlv.len - 1]; console.log("kc9000校验第" + tlv.ordinal + "条:", sw1, sw2); packets.push(_kcUtils2.default.byteArray2hexStr(tlv.value)); if (sw1 != 144 || sw2 != 0) { result.serviceCode = -1; result.serviceInfo = `kc第${tlv.ordinal}包APDU非9000`; break; } else { result.serviceCode = 0; result.serviceInfo = "9000认证成功"; } } } else { result.serviceCode = -2; result.serviceInfo = "9000认证失败,长度有误"; } result.unpacksData = packets; return result; } function analysisDeviceInfo(e) { var a, r, t, s, i, l = _kcUtils2.default.hexStr2byteArray(e), c = {}, n = l.byteLength; switch (l[0]) { case 192: return 17 == n ? (t = l.slice(1), _kcUtils2.default.showLog("deviceSN:", _kcUtils2.default.byteArray2hexStr(t)), c.serviceCode = 0, c.serviceInfo = "获取设备信息成功", c.serviceData = {}, c.serviceData.deviceSN = _kcUtils2.default.hexCharCodeToStr(_kcUtils2.default.byteArray2hexStr(t)), console.log(c.serviceData.deviceSN)) : (c.serviceCode = -1, c.serviceInfo = "获取设备信息失败,信息长度有误"), c; case 204: return 17 == n ? (a = l.slice(1, 3), r = l.slice(3, 4), t = l.slice(4, 12), s = l.slice(12, 16), i = l.slice(16), _kcUtils2.default.showLog("deviceSN:", _kcUtils2.default.byteArray2hexStr(t), "bleMac:", _kcUtils2.default.byteArray2hexStr(s), "flag:", _kcUtils2.default.byteArray2hexStr(i)), c.serviceCode = 0, c.serviceInfo = "获取设备信息成功", c.serviceData = {}, c.serviceData.verId = _kcUtils2.default.byteArray2hexStr(a), c.serviceData.battery = _kcUtils2.default.byteArray2hexStr(r), c.serviceData.deviceSN = _kcUtils2.default.byteArray2hexStr(t), c.serviceData.bleMac = _kcUtils2.default.byteArray2hexStr(s), c.serviceData.flag = i) : (c.serviceCode = -1, c.serviceInfo = "获取设备信息失败,信息长度有误"), c; default: return c.serviceCode = -2, c.serviceInfo = "获取设备信息失败,指令类型有误", _kcUtils2.default.showError("kc获取设备信息失败:", "指令类型有误"), c } } module.exports = { analysisCardInfo: analysisCardInfo, analysisDeviceInfo: analysisDeviceInfo, analysisInitInfo: analysisInitInfo, analysisLoadCreadit: analysisLoadCreadit, analysisgetObuSysInfo: analysisgetObuSysInfo, analysisGetRand: analysisGetRand, _analysisIs9000: _analysisIs9000, _analyzeUnpacksIntoArrays: _analyzeUnpacksIntoArrays, analysisVehCipherInfo: analysisVehCipherInfo, analysisCardOwnerRecord: analysisCardOwnerRecord, analysisCardTransactionRecord: analysisCardTransactionRecord, analysisgetCardConsumeRecord: analysisgetCardConsumeRecord, analysisinitIC: analysisinitIC, analysisCardbalance: analysisCardbalance };