您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

kcDataEncode.js 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. "use strict";
  2. var _kcUtils = require("./kcUtils.js")
  3. , _kcUtils2 = _interopRequireDefault(_kcUtils);
  4. function _interopRequireDefault(e) {
  5. return e && e.__esModule ? e : {
  6. default: e
  7. }
  8. }
  9. function encode(e, t, a) {
  10. var r = _kcUtils2.default.getProtocolType()
  11. , e = getETCData(e, t, a)
  12. , t = {};
  13. return 0 == r ? t = encode_GB(e) : 1 == r && (t = encode_WX(e)),
  14. console.log(t),
  15. t
  16. }
  17. function getETCData(e, t, a) {
  18. var r = ""
  19. , r = "A0" == a || "A3" == a || "A4" == a || "82" == a || "AC" == a ? a + t + (r = getCommand(e)) : e;
  20. return _kcUtils2.default.showLog("组拼ETCData完毕:", r.length / 2, r),
  21. r
  22. }
  23. function getCommand(e) {
  24. var t, a = e, r = _kcUtils2.default.getDATA_TYPE(), e = e.length / 2, n = new ArrayBuffer(10), s = new DataView(n);
  25. return 0 == r ? (t = 256 < e ? (s.setInt8(0, 4 + e & 255),
  26. s.setInt8(1, 4 + e >> 8 & 255),
  27. s.setInt8(2, 128),
  28. s.setInt8(3, 130),
  29. s.setInt8(4, e >> 8 & 255),
  30. s.setInt8(5, 255 & e),
  31. n.slice(0, 6)) : 128 < e && e <= 256 ? (s.setInt8(0, 3 + e & 255),
  32. s.setInt8(1, 3 + e >> 8 & 255),
  33. s.setInt8(2, 128),
  34. s.setInt8(3, 129),
  35. s.setInt8(4, e),
  36. n.slice(0, 5)) : (s.setInt8(0, 2 + e & 255),
  37. s.setInt8(1, 2 + e >> 8 & 255),
  38. s.setInt8(2, 128),
  39. s.setInt8(3, e),
  40. n.slice(0, 4)),
  41. a = _kcUtils2.default.byteArray2hexStr(t) + a) : 1 == r && (s.setInt8(0, 255 & e),
  42. s.setInt8(1, e >> 8 & 255),
  43. t = n.slice(0, 2),
  44. a = _kcUtils2.default.byteArray2hexStr(t) + a),
  45. a
  46. }
  47. function encode_GB(e) {
  48. var t = {}
  49. , a = _kcUtils2.default.getPagLenMax()
  50. , r = parseInt(e.length / 2 / a)
  51. , n = (e.length / 2 % a != 0 && (r += 1),
  52. new ArrayBuffer(10));
  53. new DataView(n);
  54. t.serviceCode = 0,
  55. t.serviceInfo = "encode ok",
  56. t.serviceData = {},
  57. t.serviceData.dataEncode = new Array;
  58. for (var s = 0; s < r - 1; s++)
  59. t.serviceData.dataEncode[s] = e.substr(s * a * 2, 2 * a),
  60. t.serviceData.dataEncode[s] = getGBFrame(t.serviceData.dataEncode[s], s, r);
  61. return t.serviceData.dataEncode[r - 1] = e.substring((r - 1) * a * 2),
  62. t.serviceData.dataEncode[r - 1] = getGBFrame(t.serviceData.dataEncode[r - 1], r - 1, r),
  63. t
  64. }
  65. function encode_WX(e) {
  66. for (var t = {}, a = _kcUtils2.default.getPagLenMax(), r = parseInt(e.length / 2 / a), n = (e.length / 2 % a != 0 && (r += 1),
  67. t.serviceCode = 0,
  68. t.serviceInfo = "encode ok",
  69. t.serviceData = {},
  70. t.serviceData.dataEncode = new Array,
  71. 0), n = 0; n < r - 1; n++)
  72. t.serviceData.dataEncode[n] = e.substr(n * a * 2, 2 * a),
  73. t.serviceData.dataEncode[n] = getWXFrame(t.serviceData.dataEncode[n], n, r);
  74. return t.serviceData.dataEncode[r - 1] = e.substring((r - 1) * a * 2),
  75. t.serviceData.dataEncode[r - 1] = getWXFrame(t.serviceData.dataEncode[r - 1], r - 1, r),
  76. t
  77. }
  78. function getWXFrame(e, t, a) {
  79. for (var r = e, n = new ArrayBuffer(10), s = new DataView(n), i = "", l = 0, e = e.length / 2, d = (0 == t ? s.setInt8(0, 128 + (a - 1 - t & 255)) : s.setInt8(0, a - 1 - t & 255),
  80. r = "3301" + (i = _kcUtils2.default.byteArray2hexStr(n).substring(0, 2)) + _kcUtils2.default.byte2hexStr(255 & e) + r,
  81. _kcUtils2.default.hexStr2byteArray(r)), c = 1; c < d.length; c++)
  82. l ^= d[c];
  83. r += _kcUtils2.default.byte2hexStr(l);
  84. var o, a = _kcUtils2.default.hexStr2byteArray(r).length;
  85. return 127 < a ? (s.setInt8(0, 128 + (a % 128 & 255)),
  86. s.setInt8(1, a / 128 & 255),
  87. i = _kcUtils2.default.byteArray2hexStr(n).substring(0, 4),
  88. s.setInt8(0, (o = a + 8 + 4 + 3) >> 8 & 255)) : (s.setInt8(0, 255 & a),
  89. i = _kcUtils2.default.byteArray2hexStr(n).substring(0, 2),
  90. s.setInt8(0, (o = a + 8 + 4 + 2) >> 8 & 255)),
  91. s.setInt8(1, 255 & o),
  92. r = "FE01" + _kcUtils2.default.byteArray2hexStr(n).substring(0, 4) + "753100000A0012" + i + r + "1800"
  93. }
  94. function getGBFrame(e, t, a) {
  95. for (var r = e, n = new ArrayBuffer(10), s = new DataView(n), i = 0, e = e.length / 2, l = (0 == t ? (s.setInt8(0, 128 + (a >> 8 & 255)),
  96. s.setInt8(1, 255 & a)) : (s.setInt8(0, t + 1 >> 8 & 255),
  97. s.setInt8(1, t + 1 & 255)),
  98. s.setInt8(2, 255 & e),
  99. a = _kcUtils2.default.byteArray2hexStr(n).substring(0, 6),
  100. _kcUtils2.default.hexStr2byteArray(r = "50" + a + r)), d = 0; d < l.length; d++)
  101. i ^= l[d];
  102. return r += _kcUtils2.default.byte2hexStr(i)
  103. }
  104. module.exports = {
  105. encode: encode
  106. };