qrcode-matrix 0.1.1 → 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1417 +0,0 @@
1
- /*!
2
- * qrcode-matrix v0.1.1
3
- * Homepage https://github.com/cnwhy/QRCode-matrix
4
- * License MIT
5
- */
6
-
7
- (function (global, factory) {
8
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
9
- typeof define === 'function' && define.amd ? define(factory) :
10
- (global.qrcodeMatrix = factory());
11
- }(this, (function () { 'use strict';
12
-
13
- function toUTF8Array(str) {
14
- var utf8 = [];
15
- for (var i = 0; i < str.length; i++) {
16
- var charcode = str.charCodeAt(i);
17
- if (charcode < 0x80) utf8.push(charcode);
18
- else if (charcode < 0x800) {
19
- utf8.push(0xc0 | (charcode >> 6),
20
- 0x80 | (charcode & 0x3f));
21
- } else if (charcode < 0xd800 || charcode >= 0xe000) {
22
- utf8.push(0xe0 | (charcode >> 12),
23
- 0x80 | ((charcode >> 6) & 0x3f),
24
- 0x80 | (charcode & 0x3f));
25
- }
26
- // surrogate pair
27
- else {
28
- i++;
29
- // UTF-16 encodes 0x10000-0x10FFFF by
30
- // subtracting 0x10000 and splitting the
31
- // 20 bits of 0x0-0xFFFFF into two halves
32
- charcode = 0x10000 + (((charcode & 0x3ff) << 10) |
33
- (str.charCodeAt(i) & 0x3ff));
34
- utf8.push(0xf0 | (charcode >> 18),
35
- 0x80 | ((charcode >> 12) & 0x3f),
36
- 0x80 | ((charcode >> 6) & 0x3f),
37
- 0x80 | (charcode & 0x3f));
38
- }
39
- }
40
- return utf8;
41
- }
42
-
43
- var utf8 = toUTF8Array;
44
-
45
- var QR_MODE = 1 << 2;
46
- var qr8BitByte = (function (stringToBytes) {
47
- stringToBytes = typeof stringToBytes == 'function' ? stringToBytes : utf8;
48
- return function (data) {
49
- var _data = data + '';
50
- var _bytes = _data == data ? stringToBytes(_data) : data;
51
- var _this = {};
52
- _bytes = _bytes instanceof Array ? _bytes : [];
53
-
54
- _this.getMode = function () {
55
- return QR_MODE;
56
- };
57
-
58
- _this.getLength = function (buffer) {
59
- return _bytes.length;
60
- };
61
-
62
- _this.write = function (buffer) {
63
- for (var i = 0; i < _bytes.length; i++) {
64
- buffer.put(_bytes[i], 8);
65
- }
66
- };
67
- return _this;
68
- }
69
- });
70
-
71
- var Byte = qr8BitByte;
72
-
73
- var QRMode = {
74
- MODE_NUMBER: 1 << 0,
75
- MODE_ALPHA_NUM: 1 << 1,
76
- MODE_8BIT_BYTE: 1 << 2,
77
- MODE_KANJI: 1 << 3
78
- };
79
-
80
- var QRErrorCorrectionLevel = {
81
- L: 1,
82
- M: 0,
83
- Q: 3,
84
- H: 2
85
- };
86
-
87
- var QRMaskPattern = {
88
- PATTERN000: 0,
89
- PATTERN001: 1,
90
- PATTERN010: 2,
91
- PATTERN011: 3,
92
- PATTERN100: 4,
93
- PATTERN101: 5,
94
- PATTERN110: 6,
95
- PATTERN111: 7
96
- };
97
-
98
- // 获取掩模函数
99
- var getQRMaskFunction = (function () {
100
- var QRMaskFunctions = [
101
- function (i, j) {
102
- return (i + j) % 2 == 0;
103
- },
104
- function (i, j) {
105
- return i % 2 == 0;
106
- },
107
- function (i, j) {
108
- return j % 3 == 0;
109
- },
110
- function (i, j) {
111
- return (i + j) % 3 == 0;
112
- },
113
- function (i, j) {
114
- return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
115
- },
116
- function (i, j) {
117
- return (i * j) % 2 + (i * j) % 3 == 0;
118
- },
119
- function (i, j) {
120
- return ((i * j) % 2 + (i * j) % 3) % 2 == 0;
121
- },
122
- function (i, j) {
123
- return ((i * j) % 3 + (i + j) % 2) % 2 == 0;
124
- }
125
- ];
126
- return function (maskPattern) {
127
- var fn = QRMaskFunctions[maskPattern];
128
- if (!fn) throw new Error('maskPattern:' + maskPattern);
129
- return fn;
130
- }
131
- }());
132
-
133
- // 获取数据块长度
134
- var getLengthInBits = (function () {
135
- // 各模式数据块长度
136
- var BITS_LENGTH_LIST = {};
137
- BITS_LENGTH_LIST[QRMode.MODE_NUMBER] = [10, 12, 14];
138
- BITS_LENGTH_LIST[QRMode.MODE_ALPHA_NUM] = [9, 11, 13];
139
- BITS_LENGTH_LIST[QRMode.MODE_8BIT_BYTE] = [8, 16, 16];
140
- BITS_LENGTH_LIST[QRMode.MODE_KANJI] = [8, 10, 12];
141
-
142
- return function (mode, type) {
143
- if (1 <= type && type <= 40) {
144
- var lengths = BITS_LENGTH_LIST[mode];
145
- if (!lengths) throw 'mode:' + mode;
146
- var index = type <= 9 ? 0 :
147
- type <= 26 ? 1 :
148
- 2;
149
- return lengths[index];
150
- } else {
151
- throw new Error('type:' + type);
152
- }
153
- }
154
- }());
155
-
156
- // 通过矩阵获取,版本
157
- var map2typeNumber = function (map) {
158
- return (map.length - 17) / 4;
159
- };
160
-
161
- var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);
162
- var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);
163
- var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);
164
-
165
- var getBCHDigit = function (data) {
166
- var digit = 0;
167
- while (data != 0) {
168
- digit++;
169
- data >>>= 1;
170
- }
171
- return digit;
172
- };
173
-
174
- var getBCHTypeInfo = function (data) {
175
- var d = data << 10;
176
- while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
177
- d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15)));
178
- }
179
- return ((data << 10) | d) ^ G15_MASK;
180
- };
181
-
182
- var getBCHTypeNumber = function (data) {
183
- var d = data << 12;
184
- while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
185
- d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18)));
186
- }
187
- return (data << 12) | d;
188
- };
189
-
190
- // 模拟Buffer
191
- var qrBitBuffer = function () {
192
-
193
- var _buffer = [];
194
- var _length = 0;
195
- var _this = {};
196
-
197
- _this.getBuffer = function () {
198
- return _buffer;
199
- };
200
-
201
- _this.getAt = function (index) {
202
- var bufIndex = ~~(index / 8);
203
- var bitIndex = 7 - index % 8;
204
- return ((_buffer[bufIndex] >>> bitIndex) & 1) === 1;
205
- };
206
-
207
- _this.put = function (num, length) {
208
- length = ~~length;
209
- if (length < 0) throw new Error('length:' + length)
210
- while (length--) {
211
- _this.putBit(((num >>> length) & 1) === 1);
212
- }
213
- };
214
-
215
- _this.getLengthInBits = function () {
216
- return _length;
217
- };
218
-
219
- _this.putBit = function (bit) {
220
- var bufIndex = ~~(_length / 8);
221
- if (_buffer.length <= bufIndex) {
222
- _buffer.push(0);
223
- }
224
- if (bit) {
225
- _buffer[bufIndex] |= (0x80 >>> (_length % 8));
226
- }
227
- _length += 1;
228
- };
229
-
230
- return _this;
231
- };
232
-
233
- // 填充侦测图
234
- var setupPositionProbePattern = function (map, row, col) {
235
- // var mapLength = map.length;
236
- // for (var r = -1; r <= 7; r++) {
237
- // if (row + r <= -1 || mapLength <= row + r) continue;
238
- // for (var c = -1; c <= 7; c++) {
239
- // if (col + c <= -1 || mapLength <= col + c) continue;
240
- // if ((0 <= r && r <= 6 && (c == 0 || c == 6)) ||
241
- // (0 <= c && c <= 6 && (r == 0 || r == 6)) ||
242
- // (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
243
- // map[row + r][col + c] = true;
244
- // } else {
245
- // map[row + r][col + c] = false;
246
- // }
247
- // }
248
- // }
249
- square_wk(map, row - 1, col - 1, false, 7 + 2);
250
- square_wk(map, row, col, true, 7);
251
- square_wk(map, row + 1, col + 1, false, 7 - 2);
252
- square_fill(map, row + 2, col + 2, true, 3);
253
- };
254
-
255
- //画正方型
256
- var square_wk = function (map, row, col, val, L) {
257
- var mapLength = map.length;
258
- function w(x, y) {
259
- var l = L;
260
- while (--l) {
261
- row += x, col += y;
262
- if (row < 0 || col < 0 || row >= mapLength || col >= mapLength) continue;
263
- map[row][col] = val;
264
- }
265
- }
266
- if (L < 0) return;
267
- (row < 0 || col < 0 || row >= mapLength || col >= mapLength) || (map[row][col] = val);
268
- if (L > 1) {
269
- w(1, 0), w(0, 1), w(-1, 0), w(0, -1);
270
- }
271
- };
272
-
273
- //填充正方型
274
- var square_fill = function (map, row, col, val, L) {
275
- while (L > 0) {
276
- square_wk(map, row++, col++, val, L);
277
- L -= 2;
278
- }
279
- };
280
-
281
- // 填充所有侦测图
282
- var setupAllPositionProbePattern = function (map) {
283
- var mapLength = map.length;
284
- setupPositionProbePattern(map, 0, 0);
285
- setupPositionProbePattern(map, mapLength - 7, 0);
286
- setupPositionProbePattern(map, 0, mapLength - 7);
287
- };
288
-
289
- // 填充校正图
290
- var setupPositionAdjustPattern = (function () {
291
- var PATTERN_POSITION_TABLE = [
292
- [],
293
- [6, 18],
294
- [6, 22],
295
- [6, 26],
296
- [6, 30],
297
- [6, 34],
298
- [6, 22, 38],
299
- [6, 24, 42],
300
- [6, 26, 46],
301
- [6, 28, 50],
302
- [6, 30, 54],
303
- [6, 32, 58],
304
- [6, 34, 62],
305
- [6, 26, 46, 66],
306
- [6, 26, 48, 70],
307
- [6, 26, 50, 74],
308
- [6, 30, 54, 78],
309
- [6, 30, 56, 82],
310
- [6, 30, 58, 86],
311
- [6, 34, 62, 90],
312
- [6, 28, 50, 72, 94],
313
- [6, 26, 50, 74, 98],
314
- [6, 30, 54, 78, 102],
315
- [6, 28, 54, 80, 106],
316
- [6, 32, 58, 84, 110],
317
- [6, 30, 58, 86, 114],
318
- [6, 34, 62, 90, 118],
319
- [6, 26, 50, 74, 98, 122],
320
- [6, 30, 54, 78, 102, 126],
321
- [6, 26, 52, 78, 104, 130],
322
- [6, 30, 56, 82, 108, 134],
323
- [6, 34, 60, 86, 112, 138],
324
- [6, 30, 58, 86, 114, 142],
325
- [6, 34, 62, 90, 118, 146],
326
- [6, 30, 54, 78, 102, 126, 150],
327
- [6, 24, 50, 76, 102, 128, 154],
328
- [6, 28, 54, 80, 106, 132, 158],
329
- [6, 32, 58, 84, 110, 136, 162],
330
- [6, 26, 54, 82, 110, 138, 166],
331
- [6, 30, 58, 86, 114, 142, 170]
332
- ];
333
- return function (map, typeNumber) {
334
- typeNumber = typeNumber || map2typeNumber(map);
335
- var pos = PATTERN_POSITION_TABLE[typeNumber - 1];
336
- for (var i = 0; i < pos.length; i++) {
337
- for (var j = 0; j < pos.length; j++) {
338
- var row = pos[i];
339
- var col = pos[j];
340
- if (map[row][col] != null) continue;
341
- for (var r = -2; r <= 2; r++) {
342
- for (var c = -2; c <= 2; c++) {
343
- if (r == -2 || r == 2 || c == -2 || c == 2 ||
344
- (r == 0 && c == 0)) {
345
- map[row + r][col + c] = true;
346
- } else {
347
- map[row + r][col + c] = false;
348
- }
349
- }
350
- }
351
- }
352
- }
353
- }
354
- }());
355
-
356
- // 填充定位图
357
- var setupTimingPattern = function (map) {
358
- var mapLength = map.length;
359
- for (var r = 8; r < mapLength - 8; r += 1) {
360
- if (map[r][6] != null) {
361
- continue;
362
- }
363
- map[r][6] = (r % 2 == 0);
364
- }
365
- for (var c = 8; c < mapLength - 8; c += 1) {
366
- if (map[6][c] != null) {
367
- continue;
368
- }
369
- map[6][c] = (c % 2 == 0);
370
- }
371
- };
372
-
373
- // 填充格式信息
374
- var setupTypeInfo = function (map, test, errorCorrectionLevel, maskPattern) {
375
- var mapLength = map.length;
376
- var data = (errorCorrectionLevel << 3) | maskPattern;
377
- var bits = getBCHTypeInfo(data);
378
- // vertical
379
- for (var i = 0; i < 15; i += 1) {
380
- var mod = (!test && ((bits >> i) & 1) == 1);
381
- if (i < 6) {
382
- map[i][8] = mod;
383
- } else if (i < 8) {
384
- map[i + 1][8] = mod;
385
- } else {
386
- map[mapLength - 15 + i][8] = mod;
387
- }
388
- }
389
-
390
- // horizontal
391
- for (var i = 0; i < 15; i += 1) {
392
- var mod = (!test && ((bits >> i) & 1) == 1);
393
- if (i < 8) {
394
- map[8][mapLength - i - 1] = mod;
395
- } else if (i < 9) {
396
- map[8][15 - i - 1 + 1] = mod;
397
- } else {
398
- map[8][15 - i - 1] = mod;
399
- }
400
- }
401
-
402
- // fixed module
403
- map[mapLength - 8][8] = (!test);
404
- };
405
-
406
- // 填充版本信息
407
- var setupTypeNumber = function (map, test, typeNumber) {
408
- typeNumber = typeNumber || map2typeNumber(map);
409
- var mapLength = map.length;
410
- var bits = getBCHTypeNumber(typeNumber);
411
- for (var i = 0; i < 18; i += 1) {
412
- var mod = (!test && ((bits >> i) & 1) == 1);
413
- map[Math.floor(i / 3)][i % 3 + mapLength - 8 - 3] = mod;
414
- }
415
- for (var i = 0; i < 18; i += 1) {
416
- var mod = (!test && ((bits >> i) & 1) == 1);
417
- map[i % 3 + mapLength - 8 - 3][Math.floor(i / 3)] = mod;
418
- }
419
- };
420
-
421
- // 生成空矩阵
422
- function mapInit(size) {
423
- try{
424
- var map = [],
425
- emptyArr = [];
426
- emptyArr.length = size;
427
- while (size--) {
428
- map.push(emptyArr.slice(0));
429
- }
430
- return map;
431
-
432
- }catch(e){
433
- console.log(size);
434
- }
435
- }
436
-
437
- // 拷贝矩阵
438
- function copyMap(map) {
439
- return map.map(function (v) {
440
- return v.slice(0);
441
- })
442
- }
443
-
444
- function compareMap(map, map1, type) {
445
- type = type || "and";
446
- var nMap = [];
447
- var fn = function () {
448
- switch (type) {
449
- case 'or':
450
- case '|':
451
- return function (r, c) {
452
- var a = map[r][c],b = map1[r][c];
453
- if(a || b){return true}
454
- if(a === false || b === false){return false}
455
- // return map[r][c] || map1[r][c];
456
- }
457
- case 'xor':
458
- case '^':
459
- return function (r, c) {
460
- var a = map[r][c],b = map1[r][c];
461
- if(a !== b){ return a || b}
462
- // return !map[r][c] != !map1[r][c];
463
- }
464
- case 'and':
465
- case '&':
466
- return function (r, c) {
467
- var a = map[r][c],b = map1[r][c];
468
- if(a && b){return true}
469
- if(a === false && b === false){return false}
470
- // return map[r][c] && map1[r][c];
471
- }
472
- default:
473
- throw 'type err!'
474
- }
475
- }();
476
- for (var r = 0; r < map.length; r++) {
477
- nMap[r] = [];
478
- for (var c = 0; c < map.length; c++) {
479
- nMap[r][c] = fn(r, c);
480
- }
481
- }
482
- return nMap;
483
- }
484
-
485
- // 获取数据块信息
486
- var getRSBlocks = (function () {
487
- var RS_BLOCK_TABLE = [
488
-
489
- // L
490
- // M
491
- // Q
492
- // H
493
-
494
- // 1
495
- [1, 26, 19],
496
- [1, 26, 16],
497
- [1, 26, 13],
498
- [1, 26, 9],
499
-
500
- // 2
501
- [1, 44, 34],
502
- [1, 44, 28],
503
- [1, 44, 22],
504
- [1, 44, 16],
505
-
506
- // 3
507
- [1, 70, 55],
508
- [1, 70, 44],
509
- [2, 35, 17],
510
- [2, 35, 13],
511
-
512
- // 4
513
- [1, 100, 80],
514
- [2, 50, 32],
515
- [2, 50, 24],
516
- [4, 25, 9],
517
-
518
- // 5
519
- [1, 134, 108],
520
- [2, 67, 43],
521
- [2, 33, 15, 2, 34, 16],
522
- [2, 33, 11, 2, 34, 12],
523
-
524
- // 6
525
- [2, 86, 68],
526
- [4, 43, 27],
527
- [4, 43, 19],
528
- [4, 43, 15],
529
-
530
- // 7
531
- [2, 98, 78],
532
- [4, 49, 31],
533
- [2, 32, 14, 4, 33, 15],
534
- [4, 39, 13, 1, 40, 14],
535
-
536
- // 8
537
- [2, 121, 97],
538
- [2, 60, 38, 2, 61, 39],
539
- [4, 40, 18, 2, 41, 19],
540
- [4, 40, 14, 2, 41, 15],
541
-
542
- // 9
543
- [2, 146, 116],
544
- [3, 58, 36, 2, 59, 37],
545
- [4, 36, 16, 4, 37, 17],
546
- [4, 36, 12, 4, 37, 13],
547
-
548
- // 10
549
- [2, 86, 68, 2, 87, 69],
550
- [4, 69, 43, 1, 70, 44],
551
- [6, 43, 19, 2, 44, 20],
552
- [6, 43, 15, 2, 44, 16],
553
-
554
- // 11
555
- [4, 101, 81],
556
- [1, 80, 50, 4, 81, 51],
557
- [4, 50, 22, 4, 51, 23],
558
- [3, 36, 12, 8, 37, 13],
559
-
560
- // 12
561
- [2, 116, 92, 2, 117, 93],
562
- [6, 58, 36, 2, 59, 37],
563
- [4, 46, 20, 6, 47, 21],
564
- [7, 42, 14, 4, 43, 15],
565
-
566
- // 13
567
- [4, 133, 107],
568
- [8, 59, 37, 1, 60, 38],
569
- [8, 44, 20, 4, 45, 21],
570
- [12, 33, 11, 4, 34, 12],
571
-
572
- // 14
573
- [3, 145, 115, 1, 146, 116],
574
- [4, 64, 40, 5, 65, 41],
575
- [11, 36, 16, 5, 37, 17],
576
- [11, 36, 12, 5, 37, 13],
577
-
578
- // 15
579
- [5, 109, 87, 1, 110, 88],
580
- [5, 65, 41, 5, 66, 42],
581
- [5, 54, 24, 7, 55, 25],
582
- [11, 36, 12, 7, 37, 13],
583
-
584
- // 16
585
- [5, 122, 98, 1, 123, 99],
586
- [7, 73, 45, 3, 74, 46],
587
- [15, 43, 19, 2, 44, 20],
588
- [3, 45, 15, 13, 46, 16],
589
-
590
- // 17
591
- [1, 135, 107, 5, 136, 108],
592
- [10, 74, 46, 1, 75, 47],
593
- [1, 50, 22, 15, 51, 23],
594
- [2, 42, 14, 17, 43, 15],
595
-
596
- // 18
597
- [5, 150, 120, 1, 151, 121],
598
- [9, 69, 43, 4, 70, 44],
599
- [17, 50, 22, 1, 51, 23],
600
- [2, 42, 14, 19, 43, 15],
601
-
602
- // 19
603
- [3, 141, 113, 4, 142, 114],
604
- [3, 70, 44, 11, 71, 45],
605
- [17, 47, 21, 4, 48, 22],
606
- [9, 39, 13, 16, 40, 14],
607
-
608
- // 20
609
- [3, 135, 107, 5, 136, 108],
610
- [3, 67, 41, 13, 68, 42],
611
- [15, 54, 24, 5, 55, 25],
612
- [15, 43, 15, 10, 44, 16],
613
-
614
- // 21
615
- [4, 144, 116, 4, 145, 117],
616
- [17, 68, 42],
617
- [17, 50, 22, 6, 51, 23],
618
- [19, 46, 16, 6, 47, 17],
619
-
620
- // 22
621
- [2, 139, 111, 7, 140, 112],
622
- [17, 74, 46],
623
- [7, 54, 24, 16, 55, 25],
624
- [34, 37, 13],
625
-
626
- // 23
627
- [4, 151, 121, 5, 152, 122],
628
- [4, 75, 47, 14, 76, 48],
629
- [11, 54, 24, 14, 55, 25],
630
- [16, 45, 15, 14, 46, 16],
631
-
632
- // 24
633
- [6, 147, 117, 4, 148, 118],
634
- [6, 73, 45, 14, 74, 46],
635
- [11, 54, 24, 16, 55, 25],
636
- [30, 46, 16, 2, 47, 17],
637
-
638
- // 25
639
- [8, 132, 106, 4, 133, 107],
640
- [8, 75, 47, 13, 76, 48],
641
- [7, 54, 24, 22, 55, 25],
642
- [22, 45, 15, 13, 46, 16],
643
-
644
- // 26
645
- [10, 142, 114, 2, 143, 115],
646
- [19, 74, 46, 4, 75, 47],
647
- [28, 50, 22, 6, 51, 23],
648
- [33, 46, 16, 4, 47, 17],
649
-
650
- // 27
651
- [8, 152, 122, 4, 153, 123],
652
- [22, 73, 45, 3, 74, 46],
653
- [8, 53, 23, 26, 54, 24],
654
- [12, 45, 15, 28, 46, 16],
655
-
656
- // 28
657
- [3, 147, 117, 10, 148, 118],
658
- [3, 73, 45, 23, 74, 46],
659
- [4, 54, 24, 31, 55, 25],
660
- [11, 45, 15, 31, 46, 16],
661
-
662
- // 29
663
- [7, 146, 116, 7, 147, 117],
664
- [21, 73, 45, 7, 74, 46],
665
- [1, 53, 23, 37, 54, 24],
666
- [19, 45, 15, 26, 46, 16],
667
-
668
- // 30
669
- [5, 145, 115, 10, 146, 116],
670
- [19, 75, 47, 10, 76, 48],
671
- [15, 54, 24, 25, 55, 25],
672
- [23, 45, 15, 25, 46, 16],
673
-
674
- // 31
675
- [13, 145, 115, 3, 146, 116],
676
- [2, 74, 46, 29, 75, 47],
677
- [42, 54, 24, 1, 55, 25],
678
- [23, 45, 15, 28, 46, 16],
679
-
680
- // 32
681
- [17, 145, 115],
682
- [10, 74, 46, 23, 75, 47],
683
- [10, 54, 24, 35, 55, 25],
684
- [19, 45, 15, 35, 46, 16],
685
-
686
- // 33
687
- [17, 145, 115, 1, 146, 116],
688
- [14, 74, 46, 21, 75, 47],
689
- [29, 54, 24, 19, 55, 25],
690
- [11, 45, 15, 46, 46, 16],
691
-
692
- // 34
693
- [13, 145, 115, 6, 146, 116],
694
- [14, 74, 46, 23, 75, 47],
695
- [44, 54, 24, 7, 55, 25],
696
- [59, 46, 16, 1, 47, 17],
697
-
698
- // 35
699
- [12, 151, 121, 7, 152, 122],
700
- [12, 75, 47, 26, 76, 48],
701
- [39, 54, 24, 14, 55, 25],
702
- [22, 45, 15, 41, 46, 16],
703
-
704
- // 36
705
- [6, 151, 121, 14, 152, 122],
706
- [6, 75, 47, 34, 76, 48],
707
- [46, 54, 24, 10, 55, 25],
708
- [2, 45, 15, 64, 46, 16],
709
-
710
- // 37
711
- [17, 152, 122, 4, 153, 123],
712
- [29, 74, 46, 14, 75, 47],
713
- [49, 54, 24, 10, 55, 25],
714
- [24, 45, 15, 46, 46, 16],
715
-
716
- // 38
717
- [4, 152, 122, 18, 153, 123],
718
- [13, 74, 46, 32, 75, 47],
719
- [48, 54, 24, 14, 55, 25],
720
- [42, 45, 15, 32, 46, 16],
721
-
722
- // 39
723
- [20, 147, 117, 4, 148, 118],
724
- [40, 75, 47, 7, 76, 48],
725
- [43, 54, 24, 22, 55, 25],
726
- [10, 45, 15, 67, 46, 16],
727
-
728
- // 40
729
- [19, 148, 118, 6, 149, 119],
730
- [18, 75, 47, 31, 76, 48],
731
- [34, 54, 24, 34, 55, 25],
732
- [20, 45, 15, 61, 46, 16]
733
- ];
734
-
735
- var qrRSBlock = function (totalCount, dataCount) {
736
- return {
737
- "totalCount": totalCount,
738
- "dataCount": dataCount
739
- }
740
- };
741
-
742
- var getRsBlockTable = function (typeNumber, errorCorrectionLevel) {
743
- switch (errorCorrectionLevel) {
744
- case QRErrorCorrectionLevel.L:
745
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
746
- case QRErrorCorrectionLevel.M:
747
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
748
- case QRErrorCorrectionLevel.Q:
749
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
750
- case QRErrorCorrectionLevel.H:
751
- return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
752
- default:
753
- throw 'bad rs block @ typeNumber:' + typeNumber + '/errorCorrectionLevel:' + errorCorrectionLevel;
754
- }
755
- };
756
-
757
- return function (typeNumber, errorCorrectionLevel) {
758
- var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);
759
- var length = rsBlock.length / 3;
760
- var list = [];
761
- for (var i = 0; i < length; i += 1) {
762
-
763
- var count = rsBlock[i * 3 + 0];
764
- var totalCount = rsBlock[i * 3 + 1];
765
- var dataCount = rsBlock[i * 3 + 2];
766
-
767
- for (var j = 0; j < count; j += 1) {
768
- list.push(qrRSBlock(totalCount, dataCount));
769
- }
770
- }
771
- return list;
772
- };
773
- }());
774
-
775
- // 矩阵分布评分 (筛选最优掩模方案)
776
- var getLostPoint = function (map) {
777
- var moduleCount = map.length;
778
- var lostPoint = 0;
779
- var isDark = function (row, col) {
780
- return map[row][col];
781
- };
782
-
783
- // LEVEL1
784
- for (var row = 0; row < moduleCount; row += 1) {
785
- for (var col = 0; col < moduleCount; col += 1) {
786
- var sameCount = 0;
787
- var dark = isDark(row, col);
788
- for (var r = -1; r <= 1; r += 1) {
789
- if (row + r < 0 || moduleCount <= row + r) {
790
- continue;
791
- }
792
- for (var c = -1; c <= 1; c += 1) {
793
- if (col + c < 0 || moduleCount <= col + c) {
794
- continue;
795
- }
796
- if (r == 0 && c == 0) {
797
- continue;
798
- }
799
- if (dark == isDark(row + r, col + c)) {
800
- sameCount += 1;
801
- }
802
- }
803
- }
804
- if (sameCount > 5) {
805
- lostPoint += (3 + sameCount - 5);
806
- }
807
- }
808
- }
809
- // LEVEL2
810
- for (var row = 0; row < moduleCount - 1; row += 1) {
811
- for (var col = 0; col < moduleCount - 1; col += 1) {
812
- var count = 0;
813
- if (isDark(row, col)) count += 1;
814
- if (isDark(row + 1, col)) count += 1;
815
- if (isDark(row, col + 1)) count += 1;
816
- if (isDark(row + 1, col + 1)) count += 1;
817
- if (count == 0 || count == 4) {
818
- lostPoint += 3;
819
- }
820
- }
821
- }
822
-
823
- // LEVEL3
824
- for (var row = 0; row < moduleCount; row += 1) {
825
- for (var col = 0; col < moduleCount - 6; col += 1) {
826
- if (isDark(row, col) &&
827
- !isDark(row, col + 1) &&
828
- isDark(row, col + 2) &&
829
- isDark(row, col + 3) &&
830
- isDark(row, col + 4) &&
831
- !isDark(row, col + 5) &&
832
- isDark(row, col + 6)) {
833
- lostPoint += 40;
834
- }
835
- }
836
- }
837
-
838
- for (var col = 0; col < moduleCount; col += 1) {
839
- for (var row = 0; row < moduleCount - 6; row += 1) {
840
- if (isDark(row, col) &&
841
- !isDark(row + 1, col) &&
842
- isDark(row + 2, col) &&
843
- isDark(row + 3, col) &&
844
- isDark(row + 4, col) &&
845
- !isDark(row + 5, col) &&
846
- isDark(row + 6, col)) {
847
- lostPoint += 40;
848
- }
849
- }
850
- }
851
-
852
- // LEVEL4
853
-
854
- var darkCount = 0;
855
-
856
- for (var col = 0; col < moduleCount; col += 1) {
857
- for (var row = 0; row < moduleCount; row += 1) {
858
- if (isDark(row, col)) {
859
- darkCount += 1;
860
- }
861
- }
862
- }
863
-
864
- var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
865
- lostPoint += ratio * 10;
866
-
867
- return lostPoint;
868
- };
869
-
870
- var getErrorCorrectPolynomial = function (errorCorrectLength) {
871
- var a = qrPolynomial([1], 0);
872
- for (var i = 0; i < errorCorrectLength; i += 1) {
873
- a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
874
- }
875
- return a;
876
- };
877
-
878
- var qrPolynomial = function (num, shift) {
879
-
880
- if (typeof num.length == 'undefined') {
881
- throw num.length + '/' + shift;
882
- }
883
-
884
- var _num = function () {
885
- var offset = 0;
886
- while (offset < num.length && num[offset] == 0) {
887
- offset += 1;
888
- }
889
- var _num = new Array(num.length - offset + shift);
890
- for (var i = 0; i < num.length - offset; i += 1) {
891
- _num[i] = num[i + offset];
892
- }
893
- return _num;
894
- }();
895
-
896
- var _this = {};
897
-
898
- _this.getAt = function (index) {
899
- return _num[index];
900
- };
901
-
902
- _this.getLength = function () {
903
- return _num.length;
904
- };
905
-
906
- _this.multiply = function (e) {
907
-
908
- var num = new Array(_this.getLength() + e.getLength() - 1);
909
-
910
- for (var i = 0; i < _this.getLength(); i += 1) {
911
- for (var j = 0; j < e.getLength(); j += 1) {
912
- num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
913
- }
914
- }
915
-
916
- return qrPolynomial(num, 0);
917
- };
918
-
919
- _this.mod = function (e) {
920
-
921
- if (_this.getLength() - e.getLength() < 0) {
922
- return _this;
923
- }
924
-
925
- var ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
926
-
927
- var num = new Array(_this.getLength());
928
- for (var i = 0; i < _this.getLength(); i += 1) {
929
- num[i] = _this.getAt(i);
930
- }
931
-
932
- for (var i = 0; i < e.getLength(); i += 1) {
933
- num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
934
- }
935
-
936
- // recursive call
937
- return qrPolynomial(num, 0).mod(e);
938
- };
939
-
940
- return _this;
941
- };
942
-
943
- var QRMath = (function () {
944
-
945
- var EXP_TABLE = new Array(256);
946
- var LOG_TABLE = new Array(256);
947
-
948
- // initialize tables
949
- for (var i = 0; i < 8; i += 1) {
950
- EXP_TABLE[i] = 1 << i;
951
- }
952
- for (var i = 8; i < 256; i += 1) {
953
- EXP_TABLE[i] = EXP_TABLE[i - 4] ^
954
- EXP_TABLE[i - 5] ^
955
- EXP_TABLE[i - 6] ^
956
- EXP_TABLE[i - 8];
957
- }
958
- for (var i = 0; i < 255; i += 1) {
959
- LOG_TABLE[EXP_TABLE[i]] = i;
960
- }
961
-
962
- var _this = {};
963
-
964
- _this.glog = function (n) {
965
-
966
- if (n < 1) {
967
- throw 'glog(' + n + ')';
968
- }
969
-
970
- return LOG_TABLE[n];
971
- };
972
-
973
- _this.gexp = function (n) {
974
-
975
- while (n < 0) {
976
- n += 255;
977
- }
978
-
979
- while (n >= 256) {
980
- n -= 255;
981
- }
982
-
983
- return EXP_TABLE[n];
984
- };
985
-
986
- return _this;
987
- }());
988
-
989
- var createBytes = function (buffer, rsBlocks) {
990
- var offset = 0;
991
- var maxDcCount = 0;
992
- var maxEcCount = 0;
993
-
994
- var dcdata = new Array(rsBlocks.length);
995
- var ecdata = new Array(rsBlocks.length);
996
-
997
- for (var r = 0; r < rsBlocks.length; r += 1) {
998
- var dcCount = rsBlocks[r].dataCount;
999
- var ecCount = rsBlocks[r].totalCount - dcCount;
1000
-
1001
- maxDcCount = Math.max(maxDcCount, dcCount);
1002
- maxEcCount = Math.max(maxEcCount, ecCount);
1003
-
1004
- dcdata[r] = new Array(dcCount);
1005
- for (var i = 0; i < dcdata[r].length; i += 1) {
1006
- dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];
1007
- }
1008
- offset += dcCount;
1009
-
1010
- var rsPoly = getErrorCorrectPolynomial(ecCount);
1011
- var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
1012
-
1013
- var modPoly = rawPoly.mod(rsPoly);
1014
- ecdata[r] = new Array(rsPoly.getLength() - 1);
1015
- for (var i = 0; i < ecdata[r].length; i += 1) {
1016
- var modIndex = i + modPoly.getLength() - ecdata[r].length;
1017
- ecdata[r][i] = (modIndex >= 0) ? modPoly.getAt(modIndex) : 0;
1018
- }
1019
- }
1020
-
1021
- var totalCodeCount = 0;
1022
- for (var i = 0; i < rsBlocks.length; i += 1) {
1023
- totalCodeCount += rsBlocks[i].totalCount;
1024
- }
1025
-
1026
- var data = new Array(totalCodeCount);
1027
- var index = 0;
1028
-
1029
- for (var i = 0; i < maxDcCount; i += 1) {
1030
- for (var r = 0; r < rsBlocks.length; r += 1) {
1031
- if (i < dcdata[r].length) {
1032
- data[index] = dcdata[r][i];
1033
- index += 1;
1034
- }
1035
- }
1036
- }
1037
-
1038
- for (var i = 0; i < maxEcCount; i += 1) {
1039
- for (var r = 0; r < rsBlocks.length; r += 1) {
1040
- if (i < ecdata[r].length) {
1041
- data[index] = ecdata[r][i];
1042
- index += 1;
1043
- }
1044
- }
1045
- }
1046
-
1047
- return data;
1048
- };
1049
-
1050
- var _createData = function (buffer, rsBlocks) {
1051
- var PAD0 = 0xEC;
1052
- var PAD1 = 0x11;
1053
-
1054
- // calc num max data.
1055
- var totalDataCount = 0;
1056
- for (var i = 0; i < rsBlocks.length; i += 1) {
1057
- totalDataCount += rsBlocks[i].dataCount;
1058
- }
1059
-
1060
- if (buffer.getLengthInBits() > totalDataCount * 8) {
1061
- throw 'code length overflow. (' +
1062
- buffer.getLengthInBits() +
1063
- '>' +
1064
- totalDataCount * 8 +
1065
- ')';
1066
- }
1067
-
1068
- // end code
1069
- if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
1070
- buffer.put(0, 4);
1071
- }
1072
-
1073
- // padding
1074
- while (buffer.getLengthInBits() % 8 != 0) {
1075
- buffer.putBit(false);
1076
- }
1077
-
1078
- // padding
1079
- while (true) {
1080
-
1081
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
1082
- break;
1083
- }
1084
- buffer.put(PAD0, 8);
1085
-
1086
- if (buffer.getLengthInBits() >= totalDataCount * 8) {
1087
- break;
1088
- }
1089
- buffer.put(PAD1, 8);
1090
- }
1091
-
1092
- return createBytes(buffer, rsBlocks);
1093
- };
1094
-
1095
- var createDataForBytes = function (typeNumber, errorCorrectionLevel, byteArray, mode) {
1096
- var rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1097
- var buffer = qrBitBuffer();
1098
- var data = byteArray;
1099
- buffer.put(mode, 4);
1100
- buffer.put(data.length, getLengthInBits(mode, typeNumber));
1101
- for (var i = 0; i < data.length; i++) {
1102
- buffer.put(data[i], 8);
1103
- }
1104
- return _createData(buffer, rsBlocks);
1105
- };
1106
-
1107
- var createDataForModes = function (typeNumber, errorCorrectionLevel, dataList) {
1108
- var rsBlocks = getRSBlocks(typeNumber, errorCorrectionLevel);
1109
- var buffer = qrBitBuffer();
1110
- for (var i = 0; i < dataList.length; i += 1) {
1111
- var data = dataList[i];
1112
- buffer.put(data.getMode(), 4);
1113
- buffer.put(data.getLength(), getLengthInBits(data.getMode(), typeNumber));
1114
- data.write(buffer);
1115
- }
1116
- return _createData(buffer, rsBlocks);
1117
- };
1118
-
1119
- var createData = function (typeNumber, errorCorrectionLevel, byteArray, mode) {
1120
- var cb = mode ? createDataForBytes : createDataForModes;
1121
- return cb.apply(null, arguments)
1122
- };
1123
-
1124
- var mapData = function (map, data, maskPattern) {
1125
- var _moduleCount = map.length;
1126
- var inc = -1;
1127
- var row = _moduleCount - 1;
1128
- var bitIndex = 7;
1129
- var byteIndex = 0;
1130
- var maskFunc = getQRMaskFunction(maskPattern);
1131
-
1132
- for (var col = _moduleCount - 1; col > 0; col -= 2) {
1133
- if (col == 6) col -= 1;
1134
- while (true) {
1135
- for (var c = 0; c < 2; c += 1) {
1136
- if (map[row][col - c] == null) {
1137
- var dark = false;
1138
- if (byteIndex < data.length) {
1139
- dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
1140
- }
1141
- var mask = maskFunc(row, col - c);
1142
- if (mask) {
1143
- dark = !dark;
1144
- }
1145
- map[row][col - c] = dark;
1146
- bitIndex -= 1;
1147
- if (bitIndex == -1) {
1148
- byteIndex += 1;
1149
- bitIndex = 7;
1150
- }
1151
- }
1152
- }
1153
- row += inc;
1154
- if (row < 0 || _moduleCount <= row) {
1155
- row -= inc;
1156
- inc = -inc;
1157
- break;
1158
- }
1159
- }
1160
- }
1161
-
1162
- return map;
1163
- };
1164
-
1165
- var utils = {
1166
- QRMode: QRMode,
1167
- QRErrorCorrectionLevel: QRErrorCorrectionLevel,
1168
- QRMaskPattern: QRMaskPattern,
1169
- qrBitBuffer: qrBitBuffer,
1170
- setupAllPositionProbePattern: setupAllPositionProbePattern,
1171
- setupPositionAdjustPattern: setupPositionAdjustPattern,
1172
- setupTimingPattern: setupTimingPattern,
1173
- setupTypeInfo: setupTypeInfo,
1174
- setupTypeNumber: setupTypeNumber,
1175
- mapInit: mapInit,
1176
- copyMap: copyMap,
1177
- compareMap: compareMap,
1178
- createData: createData,
1179
- mapData: mapData,
1180
- getLengthInBits: getLengthInBits,
1181
- getRSBlocks: getRSBlocks,
1182
- getLostPoint: getLostPoint,
1183
- };
1184
-
1185
- var QRErrorCorrectionLevel$1 = utils.QRErrorCorrectionLevel;
1186
- var cache = {}; //缓存
1187
-
1188
- var src = function (QRModes, defOptions) {
1189
- QRcode.QRModes = QRModes;
1190
-
1191
- // 纠错等级
1192
- // L: 1, 7%
1193
- // M: 0, 15%
1194
- // Q: 3, 25%
1195
- // H: 2, 30%
1196
- QRcode.QRErrorCorrectionLevel = QRErrorCorrectionLevel$1;
1197
-
1198
- /**
1199
- *
1200
- * @param {object} options
1201
- * {
1202
- * errorCorrectionLevel: "M", //纠错等级 默认M 'L','M','Q','H' -> [1,0,3,2]
1203
- * typeNumber: 0, //QR码版本 默认0 (自动) 1 to 40
1204
- * minTypeNumber: 0, //最小版本
1205
- * maskPattern: 'auto', //掩模 'random','auto' [0-7]
1206
- * dataMode: 'Byte' //默认 数据类型 结合 QRModes 参数
1207
- * }
1208
- */
1209
- function QRcode(options) {
1210
- options = options || {};
1211
- // var _options = {};
1212
- // for (var k in defOptions) {
1213
- // _options[k] = options[k] == undefined ? defOptions[k] : options[k];
1214
- // }
1215
- var _options = Object.assign({},defOptions,options);
1216
-
1217
- return (function () {
1218
- var _typeNumber = _options.typeNumber,
1219
- _minTypeNumber = _options.minTypeNumber,
1220
- _maskPattern = _options.maskPattern,
1221
- _dataMode = _options.dataMode,
1222
- _errorCorrectionLevel = (function () {
1223
- var l = _options.errorCorrectionLevel;
1224
- for (var k in QRErrorCorrectionLevel$1) {
1225
- var v = QRErrorCorrectionLevel$1[k];
1226
- if (l === k || +l === v) {
1227
- return v;
1228
- }
1229
- }
1230
- })();
1231
-
1232
- var _moduleCount = 0,
1233
- _dataList = [],
1234
- _dataCache = null;
1235
-
1236
- var makeImpl = function (test, maskPattern) {
1237
- var map;
1238
- if (cache['basemap_' + _typeNumber]) {
1239
- //从缓存中读取
1240
- map = utils.copyMap(cache['basemap_' + _typeNumber]);
1241
- } else {
1242
- //生成空矩阵 QR码尺寸
1243
- map = utils.mapInit(_moduleCount);
1244
- //填充探测图型
1245
- utils.setupAllPositionProbePattern(map);
1246
- //填充矫正位图
1247
- utils.setupPositionAdjustPattern(map);
1248
- //填充定位图
1249
- utils.setupTimingPattern(map);
1250
-
1251
- //做个缓存 只要版本相同 '探测图型','矫正位图','定位图' 是固定的
1252
- cache['basemap_' + _typeNumber] = utils.copyMap(map);
1253
- }
1254
-
1255
- //填充格式信息
1256
- utils.setupTypeInfo(map, test, _errorCorrectionLevel, maskPattern);
1257
-
1258
- //填充版本信息
1259
- (_typeNumber >= 7) && utils.setupTypeNumber(map, test);
1260
-
1261
- //填充数据
1262
- if (_dataCache == null) {
1263
- _dataCache = utils.createData(_typeNumber, _errorCorrectionLevel, _dataList);
1264
- }
1265
- return utils.mapData(map, _dataCache, maskPattern);
1266
- };
1267
-
1268
- var addData = function (data, mode) {
1269
- mode = mode || _dataMode;
1270
- var newData = null;
1271
- if (typeof mode == 'function') {
1272
- newData = mode(data);
1273
- if (!(newData.getMode && newData.getLength && newData.write)) {
1274
- throw 'mode invalid!'
1275
- }
1276
- } else {
1277
- if (QRModes[mode]) {
1278
- newData = QRModes[mode](data);
1279
- } else {
1280
- throw 'mode type invalid! mode is ' + mode;
1281
- }
1282
- }
1283
- _dataList.push(newData);
1284
- _dataCache = null;
1285
- };
1286
-
1287
- var make = function () {
1288
- // 如果未指定TypeNumber,则记算适合的TypeNumber
1289
- if (_typeNumber < 1) {
1290
- var typeNumber = _minTypeNumber ? _minTypeNumber : 1;
1291
- for (; typeNumber < 40; typeNumber++) {
1292
- var rsBlocks = utils.getRSBlocks(typeNumber, _errorCorrectionLevel);
1293
-
1294
- var buffer = utils.qrBitBuffer();
1295
- for (var i = 0; i < _dataList.length; i++) {
1296
- var data = _dataList[i];
1297
- buffer.put(data.getMode(), 4);
1298
- buffer.put(data.getLength(), utils.getLengthInBits(data.getMode(), typeNumber));
1299
- data.write(buffer);
1300
- }
1301
-
1302
- var totalDataCount = 0;
1303
- for (var i = 0; i < rsBlocks.length; i++) {
1304
- totalDataCount += rsBlocks[i].dataCount;
1305
- }
1306
-
1307
- if (buffer.getLengthInBits() <= totalDataCount * 8) {
1308
- break;
1309
- }
1310
- }
1311
- _typeNumber = typeNumber;
1312
- }
1313
-
1314
- _moduleCount = _typeNumber * 4 + 17;
1315
-
1316
- // 掩模
1317
-
1318
- // 随机
1319
- if (_maskPattern === 'random') {
1320
- _maskPattern = ~~(Math.random() * (7 + 1));
1321
- // 指定方案
1322
- } else if (0 <= _maskPattern && _maskPattern <= 7) {
1323
- _maskPattern = _maskPattern >> 0;
1324
- // 自动筛选最优掩模
1325
- } else { //auto
1326
- _maskPattern = (function () {
1327
- var minLostPoint = 0;
1328
- var pattern = 0;
1329
- for (var i = 0; i < 8; i += 1) {
1330
- var map = makeImpl(true, i);
1331
- var lostPoint = utils.getLostPoint(map);
1332
- if (i == 0 || minLostPoint > lostPoint) {
1333
- minLostPoint = lostPoint;
1334
- pattern = i;
1335
- }
1336
- }
1337
- return pattern;
1338
- }());
1339
- }
1340
-
1341
- var map = makeImpl(false, _maskPattern);
1342
- return map;
1343
- };
1344
-
1345
- var splitMake = function () {
1346
- var obj = {};
1347
- obj.all = make();
1348
- obj.allDiscover = utils.copyMap(cache['basemap_' + _typeNumber]),
1349
-
1350
- //positionProbe
1351
- obj.positionProbe = utils.mapInit(_moduleCount),
1352
- utils.setupAllPositionProbePattern(obj.positionProbe);
1353
-
1354
- //positionAdjust
1355
- var positionAdjust = utils.copyMap(obj.positionProbe);
1356
- utils.setupPositionAdjustPattern(positionAdjust);
1357
- obj.positionAdjust = utils.compareMap(obj.positionProbe, positionAdjust, 'xor');
1358
-
1359
- //timing
1360
- var timing = utils.mapInit(_moduleCount);
1361
- utils.setupTimingPattern(timing);
1362
- obj.timing = utils.compareMap(obj.positionAdjust, timing, "and");
1363
- obj.timing = utils.compareMap(obj.timing, timing, "xor");
1364
-
1365
-
1366
- //data
1367
- obj.data = utils.compareMap(obj.all, obj.allDiscover, 'xor');
1368
-
1369
- // console.log(obj.all);
1370
- // console.log(obj.allDiscover);
1371
- // console.log(obj.positionProbe);
1372
- // console.log(obj.positionAdjust);
1373
- // console.log(obj.timing)
1374
- // console.log(obj.data)
1375
-
1376
-
1377
- return obj;
1378
- };
1379
-
1380
- var setData = function (data, mode) {
1381
- _dataList = [];
1382
- addData(data, mode);
1383
- };
1384
-
1385
- var _this = function (str, mode) {
1386
- setData(str, mode);
1387
- return make();
1388
- };
1389
-
1390
- //暴露到外部的方法
1391
- _this.setData = setData;
1392
- _this.addData = addData;
1393
- _this.make = make;
1394
- _this.splitMake = splitMake;
1395
-
1396
- return _this;
1397
- })();
1398
- }
1399
-
1400
- return QRcode;
1401
- };
1402
-
1403
- // 数据模式
1404
- var QRModes = {
1405
- 'Byte': Byte() //以字节存储数据 utf8
1406
- };
1407
- var defOptions = {
1408
- errorCorrectionLevel: "M",
1409
- typeNumber: 0,
1410
- maskPattern: 'auto',
1411
- dataMode: 'Byte'
1412
- };
1413
- var onlyUTF8_temp = src(QRModes,defOptions);
1414
-
1415
- return onlyUTF8_temp;
1416
-
1417
- })));