123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517 |
- "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
- };
|