1 | var QRErrorCorrectLevel = require('./QRErrorCorrectLevel');
|
2 |
|
3 | function QRRSBlock(totalCount, dataCount) {
|
4 | this.totalCount = totalCount;
|
5 | this.dataCount = dataCount;
|
6 | }
|
7 |
|
8 | QRRSBlock.RS_BLOCK_TABLE = [
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | [1, 26, 19],
|
17 | [1, 26, 16],
|
18 | [1, 26, 13],
|
19 | [1, 26, 9],
|
20 |
|
21 |
|
22 | [1, 44, 34],
|
23 | [1, 44, 28],
|
24 | [1, 44, 22],
|
25 | [1, 44, 16],
|
26 |
|
27 |
|
28 | [1, 70, 55],
|
29 | [1, 70, 44],
|
30 | [2, 35, 17],
|
31 | [2, 35, 13],
|
32 |
|
33 |
|
34 | [1, 100, 80],
|
35 | [2, 50, 32],
|
36 | [2, 50, 24],
|
37 | [4, 25, 9],
|
38 |
|
39 |
|
40 | [1, 134, 108],
|
41 | [2, 67, 43],
|
42 | [2, 33, 15, 2, 34, 16],
|
43 | [2, 33, 11, 2, 34, 12],
|
44 |
|
45 |
|
46 | [2, 86, 68],
|
47 | [4, 43, 27],
|
48 | [4, 43, 19],
|
49 | [4, 43, 15],
|
50 |
|
51 |
|
52 | [2, 98, 78],
|
53 | [4, 49, 31],
|
54 | [2, 32, 14, 4, 33, 15],
|
55 | [4, 39, 13, 1, 40, 14],
|
56 |
|
57 |
|
58 | [2, 121, 97],
|
59 | [2, 60, 38, 2, 61, 39],
|
60 | [4, 40, 18, 2, 41, 19],
|
61 | [4, 40, 14, 2, 41, 15],
|
62 |
|
63 |
|
64 | [2, 146, 116],
|
65 | [3, 58, 36, 2, 59, 37],
|
66 | [4, 36, 16, 4, 37, 17],
|
67 | [4, 36, 12, 4, 37, 13],
|
68 |
|
69 |
|
70 | [2, 86, 68, 2, 87, 69],
|
71 | [4, 69, 43, 1, 70, 44],
|
72 | [6, 43, 19, 2, 44, 20],
|
73 | [6, 43, 15, 2, 44, 16],
|
74 |
|
75 |
|
76 | [4, 101, 81],
|
77 | [1, 80, 50, 4, 81, 51],
|
78 | [4, 50, 22, 4, 51, 23],
|
79 | [3, 36, 12, 8, 37, 13],
|
80 |
|
81 |
|
82 | [2, 116, 92, 2, 117, 93],
|
83 | [6, 58, 36, 2, 59, 37],
|
84 | [4, 46, 20, 6, 47, 21],
|
85 | [7, 42, 14, 4, 43, 15],
|
86 |
|
87 |
|
88 | [4, 133, 107],
|
89 | [8, 59, 37, 1, 60, 38],
|
90 | [8, 44, 20, 4, 45, 21],
|
91 | [12, 33, 11, 4, 34, 12],
|
92 |
|
93 |
|
94 | [3, 145, 115, 1, 146, 116],
|
95 | [4, 64, 40, 5, 65, 41],
|
96 | [11, 36, 16, 5, 37, 17],
|
97 | [11, 36, 12, 5, 37, 13],
|
98 |
|
99 |
|
100 | [5, 109, 87, 1, 110, 88],
|
101 | [5, 65, 41, 5, 66, 42],
|
102 | [5, 54, 24, 7, 55, 25],
|
103 | [11, 36, 12],
|
104 |
|
105 |
|
106 | [5, 122, 98, 1, 123, 99],
|
107 | [7, 73, 45, 3, 74, 46],
|
108 | [15, 43, 19, 2, 44, 20],
|
109 | [3, 45, 15, 13, 46, 16],
|
110 |
|
111 |
|
112 | [1, 135, 107, 5, 136, 108],
|
113 | [10, 74, 46, 1, 75, 47],
|
114 | [1, 50, 22, 15, 51, 23],
|
115 | [2, 42, 14, 17, 43, 15],
|
116 |
|
117 |
|
118 | [5, 150, 120, 1, 151, 121],
|
119 | [9, 69, 43, 4, 70, 44],
|
120 | [17, 50, 22, 1, 51, 23],
|
121 | [2, 42, 14, 19, 43, 15],
|
122 |
|
123 |
|
124 | [3, 141, 113, 4, 142, 114],
|
125 | [3, 70, 44, 11, 71, 45],
|
126 | [17, 47, 21, 4, 48, 22],
|
127 | [9, 39, 13, 16, 40, 14],
|
128 |
|
129 |
|
130 | [3, 135, 107, 5, 136, 108],
|
131 | [3, 67, 41, 13, 68, 42],
|
132 | [15, 54, 24, 5, 55, 25],
|
133 | [15, 43, 15, 10, 44, 16],
|
134 |
|
135 |
|
136 | [4, 144, 116, 4, 145, 117],
|
137 | [17, 68, 42],
|
138 | [17, 50, 22, 6, 51, 23],
|
139 | [19, 46, 16, 6, 47, 17],
|
140 |
|
141 |
|
142 | [2, 139, 111, 7, 140, 112],
|
143 | [17, 74, 46],
|
144 | [7, 54, 24, 16, 55, 25],
|
145 | [34, 37, 13],
|
146 |
|
147 |
|
148 | [4, 151, 121, 5, 152, 122],
|
149 | [4, 75, 47, 14, 76, 48],
|
150 | [11, 54, 24, 14, 55, 25],
|
151 | [16, 45, 15, 14, 46, 16],
|
152 |
|
153 |
|
154 | [6, 147, 117, 4, 148, 118],
|
155 | [6, 73, 45, 14, 74, 46],
|
156 | [11, 54, 24, 16, 55, 25],
|
157 | [30, 46, 16, 2, 47, 17],
|
158 |
|
159 |
|
160 | [8, 132, 106, 4, 133, 107],
|
161 | [8, 75, 47, 13, 76, 48],
|
162 | [7, 54, 24, 22, 55, 25],
|
163 | [22, 45, 15, 13, 46, 16],
|
164 |
|
165 |
|
166 | [10, 142, 114, 2, 143, 115],
|
167 | [19, 74, 46, 4, 75, 47],
|
168 | [28, 50, 22, 6, 51, 23],
|
169 | [33, 46, 16, 4, 47, 17],
|
170 |
|
171 |
|
172 | [8, 152, 122, 4, 153, 123],
|
173 | [22, 73, 45, 3, 74, 46],
|
174 | [8, 53, 23, 26, 54, 24],
|
175 | [12, 45, 15, 28, 46, 16],
|
176 |
|
177 |
|
178 | [3, 147, 117, 10, 148, 118],
|
179 | [3, 73, 45, 23, 74, 46],
|
180 | [4, 54, 24, 31, 55, 25],
|
181 | [11, 45, 15, 31, 46, 16],
|
182 |
|
183 |
|
184 | [7, 146, 116, 7, 147, 117],
|
185 | [21, 73, 45, 7, 74, 46],
|
186 | [1, 53, 23, 37, 54, 24],
|
187 | [19, 45, 15, 26, 46, 16],
|
188 |
|
189 |
|
190 | [5, 145, 115, 10, 146, 116],
|
191 | [19, 75, 47, 10, 76, 48],
|
192 | [15, 54, 24, 25, 55, 25],
|
193 | [23, 45, 15, 25, 46, 16],
|
194 |
|
195 |
|
196 | [13, 145, 115, 3, 146, 116],
|
197 | [2, 74, 46, 29, 75, 47],
|
198 | [42, 54, 24, 1, 55, 25],
|
199 | [23, 45, 15, 28, 46, 16],
|
200 |
|
201 |
|
202 | [17, 145, 115],
|
203 | [10, 74, 46, 23, 75, 47],
|
204 | [10, 54, 24, 35, 55, 25],
|
205 | [19, 45, 15, 35, 46, 16],
|
206 |
|
207 |
|
208 | [17, 145, 115, 1, 146, 116],
|
209 | [14, 74, 46, 21, 75, 47],
|
210 | [29, 54, 24, 19, 55, 25],
|
211 | [11, 45, 15, 46, 46, 16],
|
212 |
|
213 |
|
214 | [13, 145, 115, 6, 146, 116],
|
215 | [14, 74, 46, 23, 75, 47],
|
216 | [44, 54, 24, 7, 55, 25],
|
217 | [59, 46, 16, 1, 47, 17],
|
218 |
|
219 |
|
220 | [12, 151, 121, 7, 152, 122],
|
221 | [12, 75, 47, 26, 76, 48],
|
222 | [39, 54, 24, 14, 55, 25],
|
223 | [22, 45, 15, 41, 46, 16],
|
224 |
|
225 |
|
226 | [6, 151, 121, 14, 152, 122],
|
227 | [6, 75, 47, 34, 76, 48],
|
228 | [46, 54, 24, 10, 55, 25],
|
229 | [2, 45, 15, 64, 46, 16],
|
230 |
|
231 |
|
232 | [17, 152, 122, 4, 153, 123],
|
233 | [29, 74, 46, 14, 75, 47],
|
234 | [49, 54, 24, 10, 55, 25],
|
235 | [24, 45, 15, 46, 46, 16],
|
236 |
|
237 |
|
238 | [4, 152, 122, 18, 153, 123],
|
239 | [13, 74, 46, 32, 75, 47],
|
240 | [48, 54, 24, 14, 55, 25],
|
241 | [42, 45, 15, 32, 46, 16],
|
242 |
|
243 |
|
244 | [20, 147, 117, 4, 148, 118],
|
245 | [40, 75, 47, 7, 76, 48],
|
246 | [43, 54, 24, 22, 55, 25],
|
247 | [10, 45, 15, 67, 46, 16],
|
248 |
|
249 |
|
250 | [19, 148, 118, 6, 149, 119],
|
251 | [18, 75, 47, 31, 76, 48],
|
252 | [34, 54, 24, 34, 55, 25],
|
253 | [20, 45, 15, 61, 46, 16]
|
254 | ];
|
255 |
|
256 | QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {
|
257 |
|
258 | var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
|
259 |
|
260 | if (rsBlock == undefined) {
|
261 | throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
|
262 | }
|
263 |
|
264 | var length = rsBlock.length / 3;
|
265 |
|
266 | var list = new Array();
|
267 |
|
268 | for (var i = 0; i < length; i++) {
|
269 |
|
270 | var count = rsBlock[i * 3 + 0];
|
271 | var totalCount = rsBlock[i * 3 + 1];
|
272 | var dataCount = rsBlock[i * 3 + 2];
|
273 |
|
274 | for (var j = 0; j < count; j++) {
|
275 | list.push(new QRRSBlock(totalCount, dataCount) );
|
276 | }
|
277 | }
|
278 |
|
279 | return list;
|
280 | }
|
281 |
|
282 | QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {
|
283 |
|
284 | switch(errorCorrectLevel) {
|
285 | case QRErrorCorrectLevel.L :
|
286 | return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
|
287 | case QRErrorCorrectLevel.M :
|
288 | return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
|
289 | case QRErrorCorrectLevel.Q :
|
290 | return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
|
291 | case QRErrorCorrectLevel.H :
|
292 | return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
|
293 | default :
|
294 | return undefined;
|
295 | }
|
296 | }
|
297 |
|
298 | module.exports = QRRSBlock;
|