1
|
|
|
<?php |
2
|
|
|
//============================================================+ |
3
|
|
|
// File name : pdf417.php |
4
|
|
|
// Version : 1.0.005 |
5
|
|
|
// Begin : 2010-06-03 |
6
|
|
|
// Last Update : 2014-04-25 |
7
|
|
|
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - [email protected] |
8
|
|
|
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) |
9
|
|
|
// ------------------------------------------------------------------- |
10
|
|
|
// Copyright (C) 2010-2013 Nicola Asuni - Tecnick.com LTD |
11
|
|
|
// |
12
|
|
|
// This file is part of TCPDF software library. |
13
|
|
|
// |
14
|
|
|
// TCPDF is free software: you can redistribute it and/or modify it |
15
|
|
|
// under the terms of the GNU Lesser General Public License as |
16
|
|
|
// published by the Free Software Foundation, either version 3 of the |
17
|
|
|
// License, or (at your option) any later version. |
18
|
|
|
// |
19
|
|
|
// TCPDF is distributed in the hope that it will be useful, but |
20
|
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of |
21
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
22
|
|
|
// See the GNU Lesser General Public License for more details. |
23
|
|
|
// |
24
|
|
|
// You should have received a copy of the GNU Lesser General Public License |
25
|
|
|
// along with TCPDF. If not, see <http://www.gnu.org/licenses/>. |
26
|
|
|
// |
27
|
|
|
// See LICENSE.TXT file for more information. |
28
|
|
|
// ------------------------------------------------------------------- |
29
|
|
|
// |
30
|
|
|
// DESCRIPTION : |
31
|
|
|
// |
32
|
|
|
// Class to create PDF417 barcode arrays for TCPDF class. |
33
|
|
|
// PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991. |
34
|
|
|
// It is one of the most popular 2D codes because of its ability to be read with slightly modified handheld laser or linear CCD scanners. |
35
|
|
|
// TECHNICAL DATA / FEATURES OF PDF417: |
36
|
|
|
// Encodable Character Set: All 128 ASCII Characters (including extended) |
37
|
|
|
// Code Type: Continuous, Multi-Row |
38
|
|
|
// Symbol Height: 3 - 90 Rows |
39
|
|
|
// Symbol Width: 90X - 583X |
40
|
|
|
// Bidirectional Decoding: Yes |
41
|
|
|
// Error Correction Characters: 2 - 512 |
42
|
|
|
// Maximum Data Characters: 1850 text, 2710 digits, 1108 bytes |
43
|
|
|
// |
44
|
|
|
//============================================================+ |
45
|
|
|
|
46
|
|
|
/** |
47
|
|
|
* @file |
48
|
|
|
* Class to create PDF417 barcode arrays for TCPDF class. |
49
|
|
|
* PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991. |
50
|
|
|
* (requires PHP bcmath extension) |
51
|
|
|
* @package com.tecnick.tcpdf |
52
|
|
|
* @author Nicola Asuni |
53
|
|
|
* @version 1.0.005 |
54
|
|
|
*/ |
55
|
|
|
|
56
|
|
|
// definitions |
57
|
|
|
if (!defined('PDF417DEFS')) { |
58
|
|
|
|
59
|
|
|
/** |
60
|
|
|
* Indicate that definitions for this class are set |
61
|
|
|
*/ |
62
|
|
|
define('PDF417DEFS', true); |
63
|
|
|
|
64
|
|
|
// ----------------------------------------------------- |
65
|
|
|
|
66
|
|
|
/** |
67
|
|
|
* Row height respect X dimension of single module |
68
|
|
|
*/ |
69
|
|
|
define('ROWHEIGHT', 4); |
70
|
|
|
|
71
|
|
|
/** |
72
|
|
|
* Horizontal quiet zone in modules |
73
|
|
|
*/ |
74
|
|
|
define('QUIETH', 2); |
75
|
|
|
|
76
|
|
|
/** |
77
|
|
|
* Vertical quiet zone in modules |
78
|
|
|
*/ |
79
|
|
|
define('QUIETV', 2); |
80
|
|
|
|
81
|
|
|
} // end of definitions |
82
|
|
|
|
83
|
|
|
// #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# |
84
|
|
|
|
85
|
|
|
/** |
86
|
|
|
* @class PDF417 |
87
|
|
|
* Class to create PDF417 barcode arrays for TCPDF class. |
88
|
|
|
* PDF417 (ISO/IEC 15438:2006) is a 2-dimensional stacked bar code created by Symbol Technologies in 1991. |
89
|
|
|
* @package com.tecnick.tcpdf |
90
|
|
|
* @author Nicola Asuni |
91
|
|
|
* @version 1.0.003 |
92
|
|
|
*/ |
93
|
|
|
class PDF417 { |
94
|
|
|
|
95
|
|
|
/** |
96
|
|
|
* Barcode array to be returned which is readable by TCPDF. |
97
|
|
|
* @protected |
98
|
|
|
*/ |
99
|
|
|
protected $barcode_array = array(); |
100
|
|
|
|
101
|
|
|
/** |
102
|
|
|
* Start pattern. |
103
|
|
|
* @protected |
104
|
|
|
*/ |
105
|
|
|
protected $start_pattern = '11111111010101000'; |
106
|
|
|
|
107
|
|
|
/** |
108
|
|
|
* Stop pattern. |
109
|
|
|
* @protected |
110
|
|
|
*/ |
111
|
|
|
protected $stop_pattern = '111111101000101001'; |
112
|
|
|
|
113
|
|
|
/** |
114
|
|
|
* Array of text Compaction Sub-Modes (values 0xFB - 0xFF are used for submode changers). |
115
|
|
|
* @protected |
116
|
|
|
*/ |
117
|
|
|
protected $textsubmodes = array( |
118
|
|
|
array(0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x20,0xFD,0xFE,0xFF), // Alpha |
119
|
|
|
array(0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x20,0xFD,0xFE,0xFF), // Lower |
120
|
|
|
array(0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x26,0x0d,0x09,0x2c,0x3a,0x23,0x2d,0x2e,0x24,0x2f,0x2b,0x25,0x2a,0x3d,0x5e,0xFB,0x20,0xFD,0xFE,0xFF), // Mixed |
121
|
|
|
array(0x3b,0x3c,0x3e,0x40,0x5b,0x5c,0x5d,0x5f,0x60,0x7e,0x21,0x0d,0x09,0x2c,0x3a,0x0a,0x2d,0x2e,0x24,0x2f,0x22,0x7c,0x2a,0x28,0x29,0x3f,0x7b,0x7d,0x27,0xFF) // Puntuaction |
122
|
|
|
); |
123
|
|
|
|
124
|
|
|
/** |
125
|
|
|
* Array of switching codes for Text Compaction Sub-Modes. |
126
|
|
|
* @protected |
127
|
|
|
*/ |
128
|
|
|
protected $textlatch = array( |
129
|
|
|
'01' => array(27), '02' => array(28), '03' => array(28,25), // |
130
|
|
|
'10' => array(28,28), '12' => array(28), '13' => array(28,25), // |
131
|
|
|
'20' => array(28), '21' => array(27), '23' => array(25), // |
132
|
|
|
'30' => array(29), '31' => array(29,27), '32' => array(29,28) // |
133
|
|
|
); |
134
|
|
|
|
135
|
|
|
/** |
136
|
|
|
* Clusters of codewords (0, 3, 6)<br/> |
137
|
|
|
* Values are hex equivalents of binary representation of bars (1 = bar, 0 = space).<br/> |
138
|
|
|
* The codewords numbered from 900 to 928 have special meaning, some enable to switch between modes in order to optimise the code:<ul> |
139
|
|
|
* <li>900 : Switch to "Text" mode</li> |
140
|
|
|
* <li>901 : Switch to "Byte" mode</li> |
141
|
|
|
* <li>902 : Switch to "Numeric" mode</li> |
142
|
|
|
* <li>903 - 912 : Reserved</li> |
143
|
|
|
* <li>913 : Switch to "Octet" only for the next codeword</li> |
144
|
|
|
* <li>914 - 920 : Reserved</li> |
145
|
|
|
* <li>921 : Initialization</li> |
146
|
|
|
* <li>922 : Terminator codeword for Macro PDF control block</li> |
147
|
|
|
* <li>923 : Sequence tag to identify the beginning of optional fields in the Macro PDF control block</li> |
148
|
|
|
* <li>924 : Switch to "Byte" mode (If the total number of byte is multiple of 6)</li> |
149
|
|
|
* <li>925 : Identifier for a user defined Extended Channel Interpretation (ECI)</li> |
150
|
|
|
* <li>926 : Identifier for a general purpose ECI format</li> |
151
|
|
|
* <li>927 : Identifier for an ECI of a character set or code page</li> |
152
|
|
|
* <li>928 : Macro marker codeword to indicate the beginning of a Macro PDF Control Block</li> |
153
|
|
|
* </ul> |
154
|
|
|
* @protected |
155
|
|
|
*/ |
156
|
|
|
protected $clusters = array( |
157
|
|
|
array( // cluster 0 ----------------------------------------------------------------------- |
158
|
|
|
0x1d5c0,0x1eaf0,0x1f57c,0x1d4e0,0x1ea78,0x1f53e,0x1a8c0,0x1d470,0x1a860,0x15040, // 10 |
159
|
|
|
0x1a830,0x15020,0x1adc0,0x1d6f0,0x1eb7c,0x1ace0,0x1d678,0x1eb3e,0x158c0,0x1ac70, // 20 |
160
|
|
|
0x15860,0x15dc0,0x1aef0,0x1d77c,0x15ce0,0x1ae78,0x1d73e,0x15c70,0x1ae3c,0x15ef0, // 30 |
161
|
|
|
0x1af7c,0x15e78,0x1af3e,0x15f7c,0x1f5fa,0x1d2e0,0x1e978,0x1f4be,0x1a4c0,0x1d270, // 40 |
162
|
|
|
0x1e93c,0x1a460,0x1d238,0x14840,0x1a430,0x1d21c,0x14820,0x1a418,0x14810,0x1a6e0, // 50 |
163
|
|
|
0x1d378,0x1e9be,0x14cc0,0x1a670,0x1d33c,0x14c60,0x1a638,0x1d31e,0x14c30,0x1a61c, // 60 |
164
|
|
|
0x14ee0,0x1a778,0x1d3be,0x14e70,0x1a73c,0x14e38,0x1a71e,0x14f78,0x1a7be,0x14f3c, // 70 |
165
|
|
|
0x14f1e,0x1a2c0,0x1d170,0x1e8bc,0x1a260,0x1d138,0x1e89e,0x14440,0x1a230,0x1d11c, // 80 |
166
|
|
|
0x14420,0x1a218,0x14410,0x14408,0x146c0,0x1a370,0x1d1bc,0x14660,0x1a338,0x1d19e, // 90 |
167
|
|
|
0x14630,0x1a31c,0x14618,0x1460c,0x14770,0x1a3bc,0x14738,0x1a39e,0x1471c,0x147bc, // 100 |
168
|
|
|
0x1a160,0x1d0b8,0x1e85e,0x14240,0x1a130,0x1d09c,0x14220,0x1a118,0x1d08e,0x14210, // 110 |
169
|
|
|
0x1a10c,0x14208,0x1a106,0x14360,0x1a1b8,0x1d0de,0x14330,0x1a19c,0x14318,0x1a18e, // 120 |
170
|
|
|
0x1430c,0x14306,0x1a1de,0x1438e,0x14140,0x1a0b0,0x1d05c,0x14120,0x1a098,0x1d04e, // 130 |
171
|
|
|
0x14110,0x1a08c,0x14108,0x1a086,0x14104,0x141b0,0x14198,0x1418c,0x140a0,0x1d02e, // 140 |
172
|
|
|
0x1a04c,0x1a046,0x14082,0x1cae0,0x1e578,0x1f2be,0x194c0,0x1ca70,0x1e53c,0x19460, // 150 |
173
|
|
|
0x1ca38,0x1e51e,0x12840,0x19430,0x12820,0x196e0,0x1cb78,0x1e5be,0x12cc0,0x19670, // 160 |
174
|
|
|
0x1cb3c,0x12c60,0x19638,0x12c30,0x12c18,0x12ee0,0x19778,0x1cbbe,0x12e70,0x1973c, // 170 |
175
|
|
|
0x12e38,0x12e1c,0x12f78,0x197be,0x12f3c,0x12fbe,0x1dac0,0x1ed70,0x1f6bc,0x1da60, // 180 |
176
|
|
|
0x1ed38,0x1f69e,0x1b440,0x1da30,0x1ed1c,0x1b420,0x1da18,0x1ed0e,0x1b410,0x1da0c, // 190 |
177
|
|
|
0x192c0,0x1c970,0x1e4bc,0x1b6c0,0x19260,0x1c938,0x1e49e,0x1b660,0x1db38,0x1ed9e, // 200 |
178
|
|
|
0x16c40,0x12420,0x19218,0x1c90e,0x16c20,0x1b618,0x16c10,0x126c0,0x19370,0x1c9bc, // 210 |
179
|
|
|
0x16ec0,0x12660,0x19338,0x1c99e,0x16e60,0x1b738,0x1db9e,0x16e30,0x12618,0x16e18, // 220 |
180
|
|
|
0x12770,0x193bc,0x16f70,0x12738,0x1939e,0x16f38,0x1b79e,0x16f1c,0x127bc,0x16fbc, // 230 |
181
|
|
|
0x1279e,0x16f9e,0x1d960,0x1ecb8,0x1f65e,0x1b240,0x1d930,0x1ec9c,0x1b220,0x1d918, // 240 |
182
|
|
|
0x1ec8e,0x1b210,0x1d90c,0x1b208,0x1b204,0x19160,0x1c8b8,0x1e45e,0x1b360,0x19130, // 250 |
183
|
|
|
0x1c89c,0x16640,0x12220,0x1d99c,0x1c88e,0x16620,0x12210,0x1910c,0x16610,0x1b30c, // 260 |
184
|
|
|
0x19106,0x12204,0x12360,0x191b8,0x1c8de,0x16760,0x12330,0x1919c,0x16730,0x1b39c, // 270 |
185
|
|
|
0x1918e,0x16718,0x1230c,0x12306,0x123b8,0x191de,0x167b8,0x1239c,0x1679c,0x1238e, // 280 |
186
|
|
|
0x1678e,0x167de,0x1b140,0x1d8b0,0x1ec5c,0x1b120,0x1d898,0x1ec4e,0x1b110,0x1d88c, // 290 |
187
|
|
|
0x1b108,0x1d886,0x1b104,0x1b102,0x12140,0x190b0,0x1c85c,0x16340,0x12120,0x19098, // 300 |
188
|
|
|
0x1c84e,0x16320,0x1b198,0x1d8ce,0x16310,0x12108,0x19086,0x16308,0x1b186,0x16304, // 310 |
189
|
|
|
0x121b0,0x190dc,0x163b0,0x12198,0x190ce,0x16398,0x1b1ce,0x1638c,0x12186,0x16386, // 320 |
190
|
|
|
0x163dc,0x163ce,0x1b0a0,0x1d858,0x1ec2e,0x1b090,0x1d84c,0x1b088,0x1d846,0x1b084, // 330 |
191
|
|
|
0x1b082,0x120a0,0x19058,0x1c82e,0x161a0,0x12090,0x1904c,0x16190,0x1b0cc,0x19046, // 340 |
192
|
|
|
0x16188,0x12084,0x16184,0x12082,0x120d8,0x161d8,0x161cc,0x161c6,0x1d82c,0x1d826, // 350 |
193
|
|
|
0x1b042,0x1902c,0x12048,0x160c8,0x160c4,0x160c2,0x18ac0,0x1c570,0x1e2bc,0x18a60, // 360 |
194
|
|
|
0x1c538,0x11440,0x18a30,0x1c51c,0x11420,0x18a18,0x11410,0x11408,0x116c0,0x18b70, // 370 |
195
|
|
|
0x1c5bc,0x11660,0x18b38,0x1c59e,0x11630,0x18b1c,0x11618,0x1160c,0x11770,0x18bbc, // 380 |
196
|
|
|
0x11738,0x18b9e,0x1171c,0x117bc,0x1179e,0x1cd60,0x1e6b8,0x1f35e,0x19a40,0x1cd30, // 390 |
197
|
|
|
0x1e69c,0x19a20,0x1cd18,0x1e68e,0x19a10,0x1cd0c,0x19a08,0x1cd06,0x18960,0x1c4b8, // 400 |
198
|
|
|
0x1e25e,0x19b60,0x18930,0x1c49c,0x13640,0x11220,0x1cd9c,0x1c48e,0x13620,0x19b18, // 410 |
199
|
|
|
0x1890c,0x13610,0x11208,0x13608,0x11360,0x189b8,0x1c4de,0x13760,0x11330,0x1cdde, // 420 |
200
|
|
|
0x13730,0x19b9c,0x1898e,0x13718,0x1130c,0x1370c,0x113b8,0x189de,0x137b8,0x1139c, // 430 |
201
|
|
|
0x1379c,0x1138e,0x113de,0x137de,0x1dd40,0x1eeb0,0x1f75c,0x1dd20,0x1ee98,0x1f74e, // 440 |
202
|
|
|
0x1dd10,0x1ee8c,0x1dd08,0x1ee86,0x1dd04,0x19940,0x1ccb0,0x1e65c,0x1bb40,0x19920, // 450 |
203
|
|
|
0x1eedc,0x1e64e,0x1bb20,0x1dd98,0x1eece,0x1bb10,0x19908,0x1cc86,0x1bb08,0x1dd86, // 460 |
204
|
|
|
0x19902,0x11140,0x188b0,0x1c45c,0x13340,0x11120,0x18898,0x1c44e,0x17740,0x13320, // 470 |
205
|
|
|
0x19998,0x1ccce,0x17720,0x1bb98,0x1ddce,0x18886,0x17710,0x13308,0x19986,0x17708, // 480 |
206
|
|
|
0x11102,0x111b0,0x188dc,0x133b0,0x11198,0x188ce,0x177b0,0x13398,0x199ce,0x17798, // 490 |
207
|
|
|
0x1bbce,0x11186,0x13386,0x111dc,0x133dc,0x111ce,0x177dc,0x133ce,0x1dca0,0x1ee58, // 500 |
208
|
|
|
0x1f72e,0x1dc90,0x1ee4c,0x1dc88,0x1ee46,0x1dc84,0x1dc82,0x198a0,0x1cc58,0x1e62e, // 510 |
209
|
|
|
0x1b9a0,0x19890,0x1ee6e,0x1b990,0x1dccc,0x1cc46,0x1b988,0x19884,0x1b984,0x19882, // 520 |
210
|
|
|
0x1b982,0x110a0,0x18858,0x1c42e,0x131a0,0x11090,0x1884c,0x173a0,0x13190,0x198cc, // 530 |
211
|
|
|
0x18846,0x17390,0x1b9cc,0x11084,0x17388,0x13184,0x11082,0x13182,0x110d8,0x1886e, // 540 |
212
|
|
|
0x131d8,0x110cc,0x173d8,0x131cc,0x110c6,0x173cc,0x131c6,0x110ee,0x173ee,0x1dc50, // 550 |
213
|
|
|
0x1ee2c,0x1dc48,0x1ee26,0x1dc44,0x1dc42,0x19850,0x1cc2c,0x1b8d0,0x19848,0x1cc26, // 560 |
214
|
|
|
0x1b8c8,0x1dc66,0x1b8c4,0x19842,0x1b8c2,0x11050,0x1882c,0x130d0,0x11048,0x18826, // 570 |
215
|
|
|
0x171d0,0x130c8,0x19866,0x171c8,0x1b8e6,0x11042,0x171c4,0x130c2,0x171c2,0x130ec, // 580 |
216
|
|
|
0x171ec,0x171e6,0x1ee16,0x1dc22,0x1cc16,0x19824,0x19822,0x11028,0x13068,0x170e8, // 590 |
217
|
|
|
0x11022,0x13062,0x18560,0x10a40,0x18530,0x10a20,0x18518,0x1c28e,0x10a10,0x1850c, // 600 |
218
|
|
|
0x10a08,0x18506,0x10b60,0x185b8,0x1c2de,0x10b30,0x1859c,0x10b18,0x1858e,0x10b0c, // 610 |
219
|
|
|
0x10b06,0x10bb8,0x185de,0x10b9c,0x10b8e,0x10bde,0x18d40,0x1c6b0,0x1e35c,0x18d20, // 620 |
220
|
|
|
0x1c698,0x18d10,0x1c68c,0x18d08,0x1c686,0x18d04,0x10940,0x184b0,0x1c25c,0x11b40, // 630 |
221
|
|
|
0x10920,0x1c6dc,0x1c24e,0x11b20,0x18d98,0x1c6ce,0x11b10,0x10908,0x18486,0x11b08, // 640 |
222
|
|
|
0x18d86,0x10902,0x109b0,0x184dc,0x11bb0,0x10998,0x184ce,0x11b98,0x18dce,0x11b8c, // 650 |
223
|
|
|
0x10986,0x109dc,0x11bdc,0x109ce,0x11bce,0x1cea0,0x1e758,0x1f3ae,0x1ce90,0x1e74c, // 660 |
224
|
|
|
0x1ce88,0x1e746,0x1ce84,0x1ce82,0x18ca0,0x1c658,0x19da0,0x18c90,0x1c64c,0x19d90, // 670 |
225
|
|
|
0x1cecc,0x1c646,0x19d88,0x18c84,0x19d84,0x18c82,0x19d82,0x108a0,0x18458,0x119a0, // 680 |
226
|
|
|
0x10890,0x1c66e,0x13ba0,0x11990,0x18ccc,0x18446,0x13b90,0x19dcc,0x10884,0x13b88, // 690 |
227
|
|
|
0x11984,0x10882,0x11982,0x108d8,0x1846e,0x119d8,0x108cc,0x13bd8,0x119cc,0x108c6, // 700 |
228
|
|
|
0x13bcc,0x119c6,0x108ee,0x119ee,0x13bee,0x1ef50,0x1f7ac,0x1ef48,0x1f7a6,0x1ef44, // 710 |
229
|
|
|
0x1ef42,0x1ce50,0x1e72c,0x1ded0,0x1ef6c,0x1e726,0x1dec8,0x1ef66,0x1dec4,0x1ce42, // 720 |
230
|
|
|
0x1dec2,0x18c50,0x1c62c,0x19cd0,0x18c48,0x1c626,0x1bdd0,0x19cc8,0x1ce66,0x1bdc8, // 730 |
231
|
|
|
0x1dee6,0x18c42,0x1bdc4,0x19cc2,0x1bdc2,0x10850,0x1842c,0x118d0,0x10848,0x18426, // 740 |
232
|
|
|
0x139d0,0x118c8,0x18c66,0x17bd0,0x139c8,0x19ce6,0x10842,0x17bc8,0x1bde6,0x118c2, // 750 |
233
|
|
|
0x17bc4,0x1086c,0x118ec,0x10866,0x139ec,0x118e6,0x17bec,0x139e6,0x17be6,0x1ef28, // 760 |
234
|
|
|
0x1f796,0x1ef24,0x1ef22,0x1ce28,0x1e716,0x1de68,0x1ef36,0x1de64,0x1ce22,0x1de62, // 770 |
235
|
|
|
0x18c28,0x1c616,0x19c68,0x18c24,0x1bce8,0x19c64,0x18c22,0x1bce4,0x19c62,0x1bce2, // 780 |
236
|
|
|
0x10828,0x18416,0x11868,0x18c36,0x138e8,0x11864,0x10822,0x179e8,0x138e4,0x11862, // 790 |
237
|
|
|
0x179e4,0x138e2,0x179e2,0x11876,0x179f6,0x1ef12,0x1de34,0x1de32,0x19c34,0x1bc74, // 800 |
238
|
|
|
0x1bc72,0x11834,0x13874,0x178f4,0x178f2,0x10540,0x10520,0x18298,0x10510,0x10508, // 810 |
239
|
|
|
0x10504,0x105b0,0x10598,0x1058c,0x10586,0x105dc,0x105ce,0x186a0,0x18690,0x1c34c, // 820 |
240
|
|
|
0x18688,0x1c346,0x18684,0x18682,0x104a0,0x18258,0x10da0,0x186d8,0x1824c,0x10d90, // 830 |
241
|
|
|
0x186cc,0x10d88,0x186c6,0x10d84,0x10482,0x10d82,0x104d8,0x1826e,0x10dd8,0x186ee, // 840 |
242
|
|
|
0x10dcc,0x104c6,0x10dc6,0x104ee,0x10dee,0x1c750,0x1c748,0x1c744,0x1c742,0x18650, // 850 |
243
|
|
|
0x18ed0,0x1c76c,0x1c326,0x18ec8,0x1c766,0x18ec4,0x18642,0x18ec2,0x10450,0x10cd0, // 860 |
244
|
|
|
0x10448,0x18226,0x11dd0,0x10cc8,0x10444,0x11dc8,0x10cc4,0x10442,0x11dc4,0x10cc2, // 870 |
245
|
|
|
0x1046c,0x10cec,0x10466,0x11dec,0x10ce6,0x11de6,0x1e7a8,0x1e7a4,0x1e7a2,0x1c728, // 880 |
246
|
|
|
0x1cf68,0x1e7b6,0x1cf64,0x1c722,0x1cf62,0x18628,0x1c316,0x18e68,0x1c736,0x19ee8, // 890 |
247
|
|
|
0x18e64,0x18622,0x19ee4,0x18e62,0x19ee2,0x10428,0x18216,0x10c68,0x18636,0x11ce8, // 900 |
248
|
|
|
0x10c64,0x10422,0x13de8,0x11ce4,0x10c62,0x13de4,0x11ce2,0x10436,0x10c76,0x11cf6, // 910 |
249
|
|
|
0x13df6,0x1f7d4,0x1f7d2,0x1e794,0x1efb4,0x1e792,0x1efb2,0x1c714,0x1cf34,0x1c712, // 920 |
250
|
|
|
0x1df74,0x1cf32,0x1df72,0x18614,0x18e34,0x18612,0x19e74,0x18e32,0x1bef4), // 929 |
251
|
|
|
array( // cluster 3 ----------------------------------------------------------------------- |
252
|
|
|
0x1f560,0x1fab8,0x1ea40,0x1f530,0x1fa9c,0x1ea20,0x1f518,0x1fa8e,0x1ea10,0x1f50c, // 10 |
253
|
|
|
0x1ea08,0x1f506,0x1ea04,0x1eb60,0x1f5b8,0x1fade,0x1d640,0x1eb30,0x1f59c,0x1d620, // 20 |
254
|
|
|
0x1eb18,0x1f58e,0x1d610,0x1eb0c,0x1d608,0x1eb06,0x1d604,0x1d760,0x1ebb8,0x1f5de, // 30 |
255
|
|
|
0x1ae40,0x1d730,0x1eb9c,0x1ae20,0x1d718,0x1eb8e,0x1ae10,0x1d70c,0x1ae08,0x1d706, // 40 |
256
|
|
|
0x1ae04,0x1af60,0x1d7b8,0x1ebde,0x15e40,0x1af30,0x1d79c,0x15e20,0x1af18,0x1d78e, // 50 |
257
|
|
|
0x15e10,0x1af0c,0x15e08,0x1af06,0x15f60,0x1afb8,0x1d7de,0x15f30,0x1af9c,0x15f18, // 60 |
258
|
|
|
0x1af8e,0x15f0c,0x15fb8,0x1afde,0x15f9c,0x15f8e,0x1e940,0x1f4b0,0x1fa5c,0x1e920, // 70 |
259
|
|
|
0x1f498,0x1fa4e,0x1e910,0x1f48c,0x1e908,0x1f486,0x1e904,0x1e902,0x1d340,0x1e9b0, // 80 |
260
|
|
|
0x1f4dc,0x1d320,0x1e998,0x1f4ce,0x1d310,0x1e98c,0x1d308,0x1e986,0x1d304,0x1d302, // 90 |
261
|
|
|
0x1a740,0x1d3b0,0x1e9dc,0x1a720,0x1d398,0x1e9ce,0x1a710,0x1d38c,0x1a708,0x1d386, // 100 |
262
|
|
|
0x1a704,0x1a702,0x14f40,0x1a7b0,0x1d3dc,0x14f20,0x1a798,0x1d3ce,0x14f10,0x1a78c, // 110 |
263
|
|
|
0x14f08,0x1a786,0x14f04,0x14fb0,0x1a7dc,0x14f98,0x1a7ce,0x14f8c,0x14f86,0x14fdc, // 120 |
264
|
|
|
0x14fce,0x1e8a0,0x1f458,0x1fa2e,0x1e890,0x1f44c,0x1e888,0x1f446,0x1e884,0x1e882, // 130 |
265
|
|
|
0x1d1a0,0x1e8d8,0x1f46e,0x1d190,0x1e8cc,0x1d188,0x1e8c6,0x1d184,0x1d182,0x1a3a0, // 140 |
266
|
|
|
0x1d1d8,0x1e8ee,0x1a390,0x1d1cc,0x1a388,0x1d1c6,0x1a384,0x1a382,0x147a0,0x1a3d8, // 150 |
267
|
|
|
0x1d1ee,0x14790,0x1a3cc,0x14788,0x1a3c6,0x14784,0x14782,0x147d8,0x1a3ee,0x147cc, // 160 |
268
|
|
|
0x147c6,0x147ee,0x1e850,0x1f42c,0x1e848,0x1f426,0x1e844,0x1e842,0x1d0d0,0x1e86c, // 170 |
269
|
|
|
0x1d0c8,0x1e866,0x1d0c4,0x1d0c2,0x1a1d0,0x1d0ec,0x1a1c8,0x1d0e6,0x1a1c4,0x1a1c2, // 180 |
270
|
|
|
0x143d0,0x1a1ec,0x143c8,0x1a1e6,0x143c4,0x143c2,0x143ec,0x143e6,0x1e828,0x1f416, // 190 |
271
|
|
|
0x1e824,0x1e822,0x1d068,0x1e836,0x1d064,0x1d062,0x1a0e8,0x1d076,0x1a0e4,0x1a0e2, // 200 |
272
|
|
|
0x141e8,0x1a0f6,0x141e4,0x141e2,0x1e814,0x1e812,0x1d034,0x1d032,0x1a074,0x1a072, // 210 |
273
|
|
|
0x1e540,0x1f2b0,0x1f95c,0x1e520,0x1f298,0x1f94e,0x1e510,0x1f28c,0x1e508,0x1f286, // 220 |
274
|
|
|
0x1e504,0x1e502,0x1cb40,0x1e5b0,0x1f2dc,0x1cb20,0x1e598,0x1f2ce,0x1cb10,0x1e58c, // 230 |
275
|
|
|
0x1cb08,0x1e586,0x1cb04,0x1cb02,0x19740,0x1cbb0,0x1e5dc,0x19720,0x1cb98,0x1e5ce, // 240 |
276
|
|
|
0x19710,0x1cb8c,0x19708,0x1cb86,0x19704,0x19702,0x12f40,0x197b0,0x1cbdc,0x12f20, // 250 |
277
|
|
|
0x19798,0x1cbce,0x12f10,0x1978c,0x12f08,0x19786,0x12f04,0x12fb0,0x197dc,0x12f98, // 260 |
278
|
|
|
0x197ce,0x12f8c,0x12f86,0x12fdc,0x12fce,0x1f6a0,0x1fb58,0x16bf0,0x1f690,0x1fb4c, // 270 |
279
|
|
|
0x169f8,0x1f688,0x1fb46,0x168fc,0x1f684,0x1f682,0x1e4a0,0x1f258,0x1f92e,0x1eda0, // 280 |
280
|
|
|
0x1e490,0x1fb6e,0x1ed90,0x1f6cc,0x1f246,0x1ed88,0x1e484,0x1ed84,0x1e482,0x1ed82, // 290 |
281
|
|
|
0x1c9a0,0x1e4d8,0x1f26e,0x1dba0,0x1c990,0x1e4cc,0x1db90,0x1edcc,0x1e4c6,0x1db88, // 300 |
282
|
|
|
0x1c984,0x1db84,0x1c982,0x1db82,0x193a0,0x1c9d8,0x1e4ee,0x1b7a0,0x19390,0x1c9cc, // 310 |
283
|
|
|
0x1b790,0x1dbcc,0x1c9c6,0x1b788,0x19384,0x1b784,0x19382,0x1b782,0x127a0,0x193d8, // 320 |
284
|
|
|
0x1c9ee,0x16fa0,0x12790,0x193cc,0x16f90,0x1b7cc,0x193c6,0x16f88,0x12784,0x16f84, // 330 |
285
|
|
|
0x12782,0x127d8,0x193ee,0x16fd8,0x127cc,0x16fcc,0x127c6,0x16fc6,0x127ee,0x1f650, // 340 |
286
|
|
|
0x1fb2c,0x165f8,0x1f648,0x1fb26,0x164fc,0x1f644,0x1647e,0x1f642,0x1e450,0x1f22c, // 350 |
287
|
|
|
0x1ecd0,0x1e448,0x1f226,0x1ecc8,0x1f666,0x1ecc4,0x1e442,0x1ecc2,0x1c8d0,0x1e46c, // 360 |
288
|
|
|
0x1d9d0,0x1c8c8,0x1e466,0x1d9c8,0x1ece6,0x1d9c4,0x1c8c2,0x1d9c2,0x191d0,0x1c8ec, // 370 |
289
|
|
|
0x1b3d0,0x191c8,0x1c8e6,0x1b3c8,0x1d9e6,0x1b3c4,0x191c2,0x1b3c2,0x123d0,0x191ec, // 380 |
290
|
|
|
0x167d0,0x123c8,0x191e6,0x167c8,0x1b3e6,0x167c4,0x123c2,0x167c2,0x123ec,0x167ec, // 390 |
291
|
|
|
0x123e6,0x167e6,0x1f628,0x1fb16,0x162fc,0x1f624,0x1627e,0x1f622,0x1e428,0x1f216, // 400 |
292
|
|
|
0x1ec68,0x1f636,0x1ec64,0x1e422,0x1ec62,0x1c868,0x1e436,0x1d8e8,0x1c864,0x1d8e4, // 410 |
293
|
|
|
0x1c862,0x1d8e2,0x190e8,0x1c876,0x1b1e8,0x1d8f6,0x1b1e4,0x190e2,0x1b1e2,0x121e8, // 420 |
294
|
|
|
0x190f6,0x163e8,0x121e4,0x163e4,0x121e2,0x163e2,0x121f6,0x163f6,0x1f614,0x1617e, // 430 |
295
|
|
|
0x1f612,0x1e414,0x1ec34,0x1e412,0x1ec32,0x1c834,0x1d874,0x1c832,0x1d872,0x19074, // 440 |
296
|
|
|
0x1b0f4,0x19072,0x1b0f2,0x120f4,0x161f4,0x120f2,0x161f2,0x1f60a,0x1e40a,0x1ec1a, // 450 |
297
|
|
|
0x1c81a,0x1d83a,0x1903a,0x1b07a,0x1e2a0,0x1f158,0x1f8ae,0x1e290,0x1f14c,0x1e288, // 460 |
298
|
|
|
0x1f146,0x1e284,0x1e282,0x1c5a0,0x1e2d8,0x1f16e,0x1c590,0x1e2cc,0x1c588,0x1e2c6, // 470 |
299
|
|
|
0x1c584,0x1c582,0x18ba0,0x1c5d8,0x1e2ee,0x18b90,0x1c5cc,0x18b88,0x1c5c6,0x18b84, // 480 |
300
|
|
|
0x18b82,0x117a0,0x18bd8,0x1c5ee,0x11790,0x18bcc,0x11788,0x18bc6,0x11784,0x11782, // 490 |
301
|
|
|
0x117d8,0x18bee,0x117cc,0x117c6,0x117ee,0x1f350,0x1f9ac,0x135f8,0x1f348,0x1f9a6, // 500 |
302
|
|
|
0x134fc,0x1f344,0x1347e,0x1f342,0x1e250,0x1f12c,0x1e6d0,0x1e248,0x1f126,0x1e6c8, // 510 |
303
|
|
|
0x1f366,0x1e6c4,0x1e242,0x1e6c2,0x1c4d0,0x1e26c,0x1cdd0,0x1c4c8,0x1e266,0x1cdc8, // 520 |
304
|
|
|
0x1e6e6,0x1cdc4,0x1c4c2,0x1cdc2,0x189d0,0x1c4ec,0x19bd0,0x189c8,0x1c4e6,0x19bc8, // 530 |
305
|
|
|
0x1cde6,0x19bc4,0x189c2,0x19bc2,0x113d0,0x189ec,0x137d0,0x113c8,0x189e6,0x137c8, // 540 |
306
|
|
|
0x19be6,0x137c4,0x113c2,0x137c2,0x113ec,0x137ec,0x113e6,0x137e6,0x1fba8,0x175f0, // 550 |
307
|
|
|
0x1bafc,0x1fba4,0x174f8,0x1ba7e,0x1fba2,0x1747c,0x1743e,0x1f328,0x1f996,0x132fc, // 560 |
308
|
|
|
0x1f768,0x1fbb6,0x176fc,0x1327e,0x1f764,0x1f322,0x1767e,0x1f762,0x1e228,0x1f116, // 570 |
309
|
|
|
0x1e668,0x1e224,0x1eee8,0x1f776,0x1e222,0x1eee4,0x1e662,0x1eee2,0x1c468,0x1e236, // 580 |
310
|
|
|
0x1cce8,0x1c464,0x1dde8,0x1cce4,0x1c462,0x1dde4,0x1cce2,0x1dde2,0x188e8,0x1c476, // 590 |
311
|
|
|
0x199e8,0x188e4,0x1bbe8,0x199e4,0x188e2,0x1bbe4,0x199e2,0x1bbe2,0x111e8,0x188f6, // 600 |
312
|
|
|
0x133e8,0x111e4,0x177e8,0x133e4,0x111e2,0x177e4,0x133e2,0x177e2,0x111f6,0x133f6, // 610 |
313
|
|
|
0x1fb94,0x172f8,0x1b97e,0x1fb92,0x1727c,0x1723e,0x1f314,0x1317e,0x1f734,0x1f312, // 620 |
314
|
|
|
0x1737e,0x1f732,0x1e214,0x1e634,0x1e212,0x1ee74,0x1e632,0x1ee72,0x1c434,0x1cc74, // 630 |
315
|
|
|
0x1c432,0x1dcf4,0x1cc72,0x1dcf2,0x18874,0x198f4,0x18872,0x1b9f4,0x198f2,0x1b9f2, // 640 |
316
|
|
|
0x110f4,0x131f4,0x110f2,0x173f4,0x131f2,0x173f2,0x1fb8a,0x1717c,0x1713e,0x1f30a, // 650 |
317
|
|
|
0x1f71a,0x1e20a,0x1e61a,0x1ee3a,0x1c41a,0x1cc3a,0x1dc7a,0x1883a,0x1987a,0x1b8fa, // 660 |
318
|
|
|
0x1107a,0x130fa,0x171fa,0x170be,0x1e150,0x1f0ac,0x1e148,0x1f0a6,0x1e144,0x1e142, // 670 |
319
|
|
|
0x1c2d0,0x1e16c,0x1c2c8,0x1e166,0x1c2c4,0x1c2c2,0x185d0,0x1c2ec,0x185c8,0x1c2e6, // 680 |
320
|
|
|
0x185c4,0x185c2,0x10bd0,0x185ec,0x10bc8,0x185e6,0x10bc4,0x10bc2,0x10bec,0x10be6, // 690 |
321
|
|
|
0x1f1a8,0x1f8d6,0x11afc,0x1f1a4,0x11a7e,0x1f1a2,0x1e128,0x1f096,0x1e368,0x1e124, // 700 |
322
|
|
|
0x1e364,0x1e122,0x1e362,0x1c268,0x1e136,0x1c6e8,0x1c264,0x1c6e4,0x1c262,0x1c6e2, // 710 |
323
|
|
|
0x184e8,0x1c276,0x18de8,0x184e4,0x18de4,0x184e2,0x18de2,0x109e8,0x184f6,0x11be8, // 720 |
324
|
|
|
0x109e4,0x11be4,0x109e2,0x11be2,0x109f6,0x11bf6,0x1f9d4,0x13af8,0x19d7e,0x1f9d2, // 730 |
325
|
|
|
0x13a7c,0x13a3e,0x1f194,0x1197e,0x1f3b4,0x1f192,0x13b7e,0x1f3b2,0x1e114,0x1e334, // 740 |
326
|
|
|
0x1e112,0x1e774,0x1e332,0x1e772,0x1c234,0x1c674,0x1c232,0x1cef4,0x1c672,0x1cef2, // 750 |
327
|
|
|
0x18474,0x18cf4,0x18472,0x19df4,0x18cf2,0x19df2,0x108f4,0x119f4,0x108f2,0x13bf4, // 760 |
328
|
|
|
0x119f2,0x13bf2,0x17af0,0x1bd7c,0x17a78,0x1bd3e,0x17a3c,0x17a1e,0x1f9ca,0x1397c, // 770 |
329
|
|
|
0x1fbda,0x17b7c,0x1393e,0x17b3e,0x1f18a,0x1f39a,0x1f7ba,0x1e10a,0x1e31a,0x1e73a, // 780 |
330
|
|
|
0x1ef7a,0x1c21a,0x1c63a,0x1ce7a,0x1defa,0x1843a,0x18c7a,0x19cfa,0x1bdfa,0x1087a, // 790 |
331
|
|
|
0x118fa,0x139fa,0x17978,0x1bcbe,0x1793c,0x1791e,0x138be,0x179be,0x178bc,0x1789e, // 800 |
332
|
|
|
0x1785e,0x1e0a8,0x1e0a4,0x1e0a2,0x1c168,0x1e0b6,0x1c164,0x1c162,0x182e8,0x1c176, // 810 |
333
|
|
|
0x182e4,0x182e2,0x105e8,0x182f6,0x105e4,0x105e2,0x105f6,0x1f0d4,0x10d7e,0x1f0d2, // 820 |
334
|
|
|
0x1e094,0x1e1b4,0x1e092,0x1e1b2,0x1c134,0x1c374,0x1c132,0x1c372,0x18274,0x186f4, // 830 |
335
|
|
|
0x18272,0x186f2,0x104f4,0x10df4,0x104f2,0x10df2,0x1f8ea,0x11d7c,0x11d3e,0x1f0ca, // 840 |
336
|
|
|
0x1f1da,0x1e08a,0x1e19a,0x1e3ba,0x1c11a,0x1c33a,0x1c77a,0x1823a,0x1867a,0x18efa, // 850 |
337
|
|
|
0x1047a,0x10cfa,0x11dfa,0x13d78,0x19ebe,0x13d3c,0x13d1e,0x11cbe,0x13dbe,0x17d70, // 860 |
338
|
|
|
0x1bebc,0x17d38,0x1be9e,0x17d1c,0x17d0e,0x13cbc,0x17dbc,0x13c9e,0x17d9e,0x17cb8, // 870 |
339
|
|
|
0x1be5e,0x17c9c,0x17c8e,0x13c5e,0x17cde,0x17c5c,0x17c4e,0x17c2e,0x1c0b4,0x1c0b2, // 880 |
340
|
|
|
0x18174,0x18172,0x102f4,0x102f2,0x1e0da,0x1c09a,0x1c1ba,0x1813a,0x1837a,0x1027a, // 890 |
341
|
|
|
0x106fa,0x10ebe,0x11ebc,0x11e9e,0x13eb8,0x19f5e,0x13e9c,0x13e8e,0x11e5e,0x13ede, // 900 |
342
|
|
|
0x17eb0,0x1bf5c,0x17e98,0x1bf4e,0x17e8c,0x17e86,0x13e5c,0x17edc,0x13e4e,0x17ece, // 910 |
343
|
|
|
0x17e58,0x1bf2e,0x17e4c,0x17e46,0x13e2e,0x17e6e,0x17e2c,0x17e26,0x10f5e,0x11f5c, // 920 |
344
|
|
|
0x11f4e,0x13f58,0x19fae,0x13f4c,0x13f46,0x11f2e,0x13f6e,0x13f2c,0x13f26), // 929 |
345
|
|
|
array( // cluster 6 ----------------------------------------------------------------------- |
346
|
|
|
0x1abe0,0x1d5f8,0x153c0,0x1a9f0,0x1d4fc,0x151e0,0x1a8f8,0x1d47e,0x150f0,0x1a87c, // 10 |
347
|
|
|
0x15078,0x1fad0,0x15be0,0x1adf8,0x1fac8,0x159f0,0x1acfc,0x1fac4,0x158f8,0x1ac7e, // 20 |
348
|
|
|
0x1fac2,0x1587c,0x1f5d0,0x1faec,0x15df8,0x1f5c8,0x1fae6,0x15cfc,0x1f5c4,0x15c7e, // 30 |
349
|
|
|
0x1f5c2,0x1ebd0,0x1f5ec,0x1ebc8,0x1f5e6,0x1ebc4,0x1ebc2,0x1d7d0,0x1ebec,0x1d7c8, // 40 |
350
|
|
|
0x1ebe6,0x1d7c4,0x1d7c2,0x1afd0,0x1d7ec,0x1afc8,0x1d7e6,0x1afc4,0x14bc0,0x1a5f0, // 50 |
351
|
|
|
0x1d2fc,0x149e0,0x1a4f8,0x1d27e,0x148f0,0x1a47c,0x14878,0x1a43e,0x1483c,0x1fa68, // 60 |
352
|
|
|
0x14df0,0x1a6fc,0x1fa64,0x14cf8,0x1a67e,0x1fa62,0x14c7c,0x14c3e,0x1f4e8,0x1fa76, // 70 |
353
|
|
|
0x14efc,0x1f4e4,0x14e7e,0x1f4e2,0x1e9e8,0x1f4f6,0x1e9e4,0x1e9e2,0x1d3e8,0x1e9f6, // 80 |
354
|
|
|
0x1d3e4,0x1d3e2,0x1a7e8,0x1d3f6,0x1a7e4,0x1a7e2,0x145e0,0x1a2f8,0x1d17e,0x144f0, // 90 |
355
|
|
|
0x1a27c,0x14478,0x1a23e,0x1443c,0x1441e,0x1fa34,0x146f8,0x1a37e,0x1fa32,0x1467c, // 100 |
356
|
|
|
0x1463e,0x1f474,0x1477e,0x1f472,0x1e8f4,0x1e8f2,0x1d1f4,0x1d1f2,0x1a3f4,0x1a3f2, // 110 |
357
|
|
|
0x142f0,0x1a17c,0x14278,0x1a13e,0x1423c,0x1421e,0x1fa1a,0x1437c,0x1433e,0x1f43a, // 120 |
358
|
|
|
0x1e87a,0x1d0fa,0x14178,0x1a0be,0x1413c,0x1411e,0x141be,0x140bc,0x1409e,0x12bc0, // 130 |
359
|
|
|
0x195f0,0x1cafc,0x129e0,0x194f8,0x1ca7e,0x128f0,0x1947c,0x12878,0x1943e,0x1283c, // 140 |
360
|
|
|
0x1f968,0x12df0,0x196fc,0x1f964,0x12cf8,0x1967e,0x1f962,0x12c7c,0x12c3e,0x1f2e8, // 150 |
361
|
|
|
0x1f976,0x12efc,0x1f2e4,0x12e7e,0x1f2e2,0x1e5e8,0x1f2f6,0x1e5e4,0x1e5e2,0x1cbe8, // 160 |
362
|
|
|
0x1e5f6,0x1cbe4,0x1cbe2,0x197e8,0x1cbf6,0x197e4,0x197e2,0x1b5e0,0x1daf8,0x1ed7e, // 170 |
363
|
|
|
0x169c0,0x1b4f0,0x1da7c,0x168e0,0x1b478,0x1da3e,0x16870,0x1b43c,0x16838,0x1b41e, // 180 |
364
|
|
|
0x1681c,0x125e0,0x192f8,0x1c97e,0x16de0,0x124f0,0x1927c,0x16cf0,0x1b67c,0x1923e, // 190 |
365
|
|
|
0x16c78,0x1243c,0x16c3c,0x1241e,0x16c1e,0x1f934,0x126f8,0x1937e,0x1fb74,0x1f932, // 200 |
366
|
|
|
0x16ef8,0x1267c,0x1fb72,0x16e7c,0x1263e,0x16e3e,0x1f274,0x1277e,0x1f6f4,0x1f272, // 210 |
367
|
|
|
0x16f7e,0x1f6f2,0x1e4f4,0x1edf4,0x1e4f2,0x1edf2,0x1c9f4,0x1dbf4,0x1c9f2,0x1dbf2, // 220 |
368
|
|
|
0x193f4,0x193f2,0x165c0,0x1b2f0,0x1d97c,0x164e0,0x1b278,0x1d93e,0x16470,0x1b23c, // 230 |
369
|
|
|
0x16438,0x1b21e,0x1641c,0x1640e,0x122f0,0x1917c,0x166f0,0x12278,0x1913e,0x16678, // 240 |
370
|
|
|
0x1b33e,0x1663c,0x1221e,0x1661e,0x1f91a,0x1237c,0x1fb3a,0x1677c,0x1233e,0x1673e, // 250 |
371
|
|
|
0x1f23a,0x1f67a,0x1e47a,0x1ecfa,0x1c8fa,0x1d9fa,0x191fa,0x162e0,0x1b178,0x1d8be, // 260 |
372
|
|
|
0x16270,0x1b13c,0x16238,0x1b11e,0x1621c,0x1620e,0x12178,0x190be,0x16378,0x1213c, // 270 |
373
|
|
|
0x1633c,0x1211e,0x1631e,0x121be,0x163be,0x16170,0x1b0bc,0x16138,0x1b09e,0x1611c, // 280 |
374
|
|
|
0x1610e,0x120bc,0x161bc,0x1209e,0x1619e,0x160b8,0x1b05e,0x1609c,0x1608e,0x1205e, // 290 |
375
|
|
|
0x160de,0x1605c,0x1604e,0x115e0,0x18af8,0x1c57e,0x114f0,0x18a7c,0x11478,0x18a3e, // 300 |
376
|
|
|
0x1143c,0x1141e,0x1f8b4,0x116f8,0x18b7e,0x1f8b2,0x1167c,0x1163e,0x1f174,0x1177e, // 310 |
377
|
|
|
0x1f172,0x1e2f4,0x1e2f2,0x1c5f4,0x1c5f2,0x18bf4,0x18bf2,0x135c0,0x19af0,0x1cd7c, // 320 |
378
|
|
|
0x134e0,0x19a78,0x1cd3e,0x13470,0x19a3c,0x13438,0x19a1e,0x1341c,0x1340e,0x112f0, // 330 |
379
|
|
|
0x1897c,0x136f0,0x11278,0x1893e,0x13678,0x19b3e,0x1363c,0x1121e,0x1361e,0x1f89a, // 340 |
380
|
|
|
0x1137c,0x1f9ba,0x1377c,0x1133e,0x1373e,0x1f13a,0x1f37a,0x1e27a,0x1e6fa,0x1c4fa, // 350 |
381
|
|
|
0x1cdfa,0x189fa,0x1bae0,0x1dd78,0x1eebe,0x174c0,0x1ba70,0x1dd3c,0x17460,0x1ba38, // 360 |
382
|
|
|
0x1dd1e,0x17430,0x1ba1c,0x17418,0x1ba0e,0x1740c,0x132e0,0x19978,0x1ccbe,0x176e0, // 370 |
383
|
|
|
0x13270,0x1993c,0x17670,0x1bb3c,0x1991e,0x17638,0x1321c,0x1761c,0x1320e,0x1760e, // 380 |
384
|
|
|
0x11178,0x188be,0x13378,0x1113c,0x17778,0x1333c,0x1111e,0x1773c,0x1331e,0x1771e, // 390 |
385
|
|
|
0x111be,0x133be,0x177be,0x172c0,0x1b970,0x1dcbc,0x17260,0x1b938,0x1dc9e,0x17230, // 400 |
386
|
|
|
0x1b91c,0x17218,0x1b90e,0x1720c,0x17206,0x13170,0x198bc,0x17370,0x13138,0x1989e, // 410 |
387
|
|
|
0x17338,0x1b99e,0x1731c,0x1310e,0x1730e,0x110bc,0x131bc,0x1109e,0x173bc,0x1319e, // 420 |
388
|
|
|
0x1739e,0x17160,0x1b8b8,0x1dc5e,0x17130,0x1b89c,0x17118,0x1b88e,0x1710c,0x17106, // 430 |
389
|
|
|
0x130b8,0x1985e,0x171b8,0x1309c,0x1719c,0x1308e,0x1718e,0x1105e,0x130de,0x171de, // 440 |
390
|
|
|
0x170b0,0x1b85c,0x17098,0x1b84e,0x1708c,0x17086,0x1305c,0x170dc,0x1304e,0x170ce, // 450 |
391
|
|
|
0x17058,0x1b82e,0x1704c,0x17046,0x1302e,0x1706e,0x1702c,0x17026,0x10af0,0x1857c, // 460 |
392
|
|
|
0x10a78,0x1853e,0x10a3c,0x10a1e,0x10b7c,0x10b3e,0x1f0ba,0x1e17a,0x1c2fa,0x185fa, // 470 |
393
|
|
|
0x11ae0,0x18d78,0x1c6be,0x11a70,0x18d3c,0x11a38,0x18d1e,0x11a1c,0x11a0e,0x10978, // 480 |
394
|
|
|
0x184be,0x11b78,0x1093c,0x11b3c,0x1091e,0x11b1e,0x109be,0x11bbe,0x13ac0,0x19d70, // 490 |
395
|
|
|
0x1cebc,0x13a60,0x19d38,0x1ce9e,0x13a30,0x19d1c,0x13a18,0x19d0e,0x13a0c,0x13a06, // 500 |
396
|
|
|
0x11970,0x18cbc,0x13b70,0x11938,0x18c9e,0x13b38,0x1191c,0x13b1c,0x1190e,0x13b0e, // 510 |
397
|
|
|
0x108bc,0x119bc,0x1089e,0x13bbc,0x1199e,0x13b9e,0x1bd60,0x1deb8,0x1ef5e,0x17a40, // 520 |
398
|
|
|
0x1bd30,0x1de9c,0x17a20,0x1bd18,0x1de8e,0x17a10,0x1bd0c,0x17a08,0x1bd06,0x17a04, // 530 |
399
|
|
|
0x13960,0x19cb8,0x1ce5e,0x17b60,0x13930,0x19c9c,0x17b30,0x1bd9c,0x19c8e,0x17b18, // 540 |
400
|
|
|
0x1390c,0x17b0c,0x13906,0x17b06,0x118b8,0x18c5e,0x139b8,0x1189c,0x17bb8,0x1399c, // 550 |
401
|
|
|
0x1188e,0x17b9c,0x1398e,0x17b8e,0x1085e,0x118de,0x139de,0x17bde,0x17940,0x1bcb0, // 560 |
402
|
|
|
0x1de5c,0x17920,0x1bc98,0x1de4e,0x17910,0x1bc8c,0x17908,0x1bc86,0x17904,0x17902, // 570 |
403
|
|
|
0x138b0,0x19c5c,0x179b0,0x13898,0x19c4e,0x17998,0x1bcce,0x1798c,0x13886,0x17986, // 580 |
404
|
|
|
0x1185c,0x138dc,0x1184e,0x179dc,0x138ce,0x179ce,0x178a0,0x1bc58,0x1de2e,0x17890, // 590 |
405
|
|
|
0x1bc4c,0x17888,0x1bc46,0x17884,0x17882,0x13858,0x19c2e,0x178d8,0x1384c,0x178cc, // 600 |
406
|
|
|
0x13846,0x178c6,0x1182e,0x1386e,0x178ee,0x17850,0x1bc2c,0x17848,0x1bc26,0x17844, // 610 |
407
|
|
|
0x17842,0x1382c,0x1786c,0x13826,0x17866,0x17828,0x1bc16,0x17824,0x17822,0x13816, // 620 |
408
|
|
|
0x17836,0x10578,0x182be,0x1053c,0x1051e,0x105be,0x10d70,0x186bc,0x10d38,0x1869e, // 630 |
409
|
|
|
0x10d1c,0x10d0e,0x104bc,0x10dbc,0x1049e,0x10d9e,0x11d60,0x18eb8,0x1c75e,0x11d30, // 640 |
410
|
|
|
0x18e9c,0x11d18,0x18e8e,0x11d0c,0x11d06,0x10cb8,0x1865e,0x11db8,0x10c9c,0x11d9c, // 650 |
411
|
|
|
0x10c8e,0x11d8e,0x1045e,0x10cde,0x11dde,0x13d40,0x19eb0,0x1cf5c,0x13d20,0x19e98, // 660 |
412
|
|
|
0x1cf4e,0x13d10,0x19e8c,0x13d08,0x19e86,0x13d04,0x13d02,0x11cb0,0x18e5c,0x13db0, // 670 |
413
|
|
|
0x11c98,0x18e4e,0x13d98,0x19ece,0x13d8c,0x11c86,0x13d86,0x10c5c,0x11cdc,0x10c4e, // 680 |
414
|
|
|
0x13ddc,0x11cce,0x13dce,0x1bea0,0x1df58,0x1efae,0x1be90,0x1df4c,0x1be88,0x1df46, // 690 |
415
|
|
|
0x1be84,0x1be82,0x13ca0,0x19e58,0x1cf2e,0x17da0,0x13c90,0x19e4c,0x17d90,0x1becc, // 700 |
416
|
|
|
0x19e46,0x17d88,0x13c84,0x17d84,0x13c82,0x17d82,0x11c58,0x18e2e,0x13cd8,0x11c4c, // 710 |
417
|
|
|
0x17dd8,0x13ccc,0x11c46,0x17dcc,0x13cc6,0x17dc6,0x10c2e,0x11c6e,0x13cee,0x17dee, // 720 |
418
|
|
|
0x1be50,0x1df2c,0x1be48,0x1df26,0x1be44,0x1be42,0x13c50,0x19e2c,0x17cd0,0x13c48, // 730 |
419
|
|
|
0x19e26,0x17cc8,0x1be66,0x17cc4,0x13c42,0x17cc2,0x11c2c,0x13c6c,0x11c26,0x17cec, // 740 |
420
|
|
|
0x13c66,0x17ce6,0x1be28,0x1df16,0x1be24,0x1be22,0x13c28,0x19e16,0x17c68,0x13c24, // 750 |
421
|
|
|
0x17c64,0x13c22,0x17c62,0x11c16,0x13c36,0x17c76,0x1be14,0x1be12,0x13c14,0x17c34, // 760 |
422
|
|
|
0x13c12,0x17c32,0x102bc,0x1029e,0x106b8,0x1835e,0x1069c,0x1068e,0x1025e,0x106de, // 770 |
423
|
|
|
0x10eb0,0x1875c,0x10e98,0x1874e,0x10e8c,0x10e86,0x1065c,0x10edc,0x1064e,0x10ece, // 780 |
424
|
|
|
0x11ea0,0x18f58,0x1c7ae,0x11e90,0x18f4c,0x11e88,0x18f46,0x11e84,0x11e82,0x10e58, // 790 |
425
|
|
|
0x1872e,0x11ed8,0x18f6e,0x11ecc,0x10e46,0x11ec6,0x1062e,0x10e6e,0x11eee,0x19f50, // 800 |
426
|
|
|
0x1cfac,0x19f48,0x1cfa6,0x19f44,0x19f42,0x11e50,0x18f2c,0x13ed0,0x19f6c,0x18f26, // 810 |
427
|
|
|
0x13ec8,0x11e44,0x13ec4,0x11e42,0x13ec2,0x10e2c,0x11e6c,0x10e26,0x13eec,0x11e66, // 820 |
428
|
|
|
0x13ee6,0x1dfa8,0x1efd6,0x1dfa4,0x1dfa2,0x19f28,0x1cf96,0x1bf68,0x19f24,0x1bf64, // 830 |
429
|
|
|
0x19f22,0x1bf62,0x11e28,0x18f16,0x13e68,0x11e24,0x17ee8,0x13e64,0x11e22,0x17ee4, // 840 |
430
|
|
|
0x13e62,0x17ee2,0x10e16,0x11e36,0x13e76,0x17ef6,0x1df94,0x1df92,0x19f14,0x1bf34, // 850 |
431
|
|
|
0x19f12,0x1bf32,0x11e14,0x13e34,0x11e12,0x17e74,0x13e32,0x17e72,0x1df8a,0x19f0a, // 860 |
432
|
|
|
0x1bf1a,0x11e0a,0x13e1a,0x17e3a,0x1035c,0x1034e,0x10758,0x183ae,0x1074c,0x10746, // 870 |
433
|
|
|
0x1032e,0x1076e,0x10f50,0x187ac,0x10f48,0x187a6,0x10f44,0x10f42,0x1072c,0x10f6c, // 880 |
434
|
|
|
0x10726,0x10f66,0x18fa8,0x1c7d6,0x18fa4,0x18fa2,0x10f28,0x18796,0x11f68,0x18fb6, // 890 |
435
|
|
|
0x11f64,0x10f22,0x11f62,0x10716,0x10f36,0x11f76,0x1cfd4,0x1cfd2,0x18f94,0x19fb4, // 900 |
436
|
|
|
0x18f92,0x19fb2,0x10f14,0x11f34,0x10f12,0x13f74,0x11f32,0x13f72,0x1cfca,0x18f8a, // 910 |
437
|
|
|
0x19f9a,0x10f0a,0x11f1a,0x13f3a,0x103ac,0x103a6,0x107a8,0x183d6,0x107a4,0x107a2, // 920 |
438
|
|
|
0x10396,0x107b6,0x187d4,0x187d2,0x10794,0x10fb4,0x10792,0x10fb2,0x1c7ea) // 929 |
439
|
|
|
); // end of $clusters array |
440
|
|
|
|
441
|
|
|
/** |
442
|
|
|
* Array of factors of the Reed-Solomon polynomial equations used for error correction; one sub array for each correction level (0-8). |
443
|
|
|
* @protected |
444
|
|
|
*/ |
445
|
|
|
protected $rsfactors = array( |
446
|
|
|
array( // ECL 0 (2 factors) ------------------------------------------------------------------------------- |
447
|
|
|
0x01b,0x395), // 2 |
448
|
|
|
array( // ECL 1 (4 factors) ------------------------------------------------------------------------------- |
449
|
|
|
0x20a,0x238,0x2d3,0x329), // 4 |
450
|
|
|
array( // ECL 2 (8 factors) ------------------------------------------------------------------------------- |
451
|
|
|
0x0ed,0x134,0x1b4,0x11c,0x286,0x28d,0x1ac,0x17b), // 8 |
452
|
|
|
array( // ECL 3 (16 factors) ------------------------------------------------------------------------------ |
453
|
|
|
0x112,0x232,0x0e8,0x2f3,0x257,0x20c,0x321,0x084,0x127,0x074,0x1ba,0x1ac,0x127,0x02a,0x0b0,0x041),// 16 |
454
|
|
|
array( // ECL 4 (32 factors) ------------------------------------------------------------------------------ |
455
|
|
|
0x169,0x23f,0x39a,0x20d,0x0b0,0x24a,0x280,0x141,0x218,0x2e6,0x2a5,0x2e6,0x2af,0x11c,0x0c1,0x205, // 16 |
456
|
|
|
0x111,0x1ee,0x107,0x093,0x251,0x320,0x23b,0x140,0x323,0x085,0x0e7,0x186,0x2ad,0x14a,0x03f,0x19a),// 32 |
457
|
|
|
array( // ECL 5 (64 factors) ------------------------------------------------------------------------------ |
458
|
|
|
0x21b,0x1a6,0x006,0x05d,0x35e,0x303,0x1c5,0x06a,0x262,0x11f,0x06b,0x1f9,0x2dd,0x36d,0x17d,0x264, // 16 |
459
|
|
|
0x2d3,0x1dc,0x1ce,0x0ac,0x1ae,0x261,0x35a,0x336,0x21f,0x178,0x1ff,0x190,0x2a0,0x2fa,0x11b,0x0b8, // 32 |
460
|
|
|
0x1b8,0x023,0x207,0x01f,0x1cc,0x252,0x0e1,0x217,0x205,0x160,0x25d,0x09e,0x28b,0x0c9,0x1e8,0x1f6, // 48 |
461
|
|
|
0x288,0x2dd,0x2cd,0x053,0x194,0x061,0x118,0x303,0x348,0x275,0x004,0x17d,0x34b,0x26f,0x108,0x21f),// 64 |
462
|
|
|
array( // ECL 6 (128 factors) ----------------------------------------------------------------------------- |
463
|
|
|
0x209,0x136,0x360,0x223,0x35a,0x244,0x128,0x17b,0x035,0x30b,0x381,0x1bc,0x190,0x39d,0x2ed,0x19f, // 16 |
464
|
|
|
0x336,0x05d,0x0d9,0x0d0,0x3a0,0x0f4,0x247,0x26c,0x0f6,0x094,0x1bf,0x277,0x124,0x38c,0x1ea,0x2c0, // 32 |
465
|
|
|
0x204,0x102,0x1c9,0x38b,0x252,0x2d3,0x2a2,0x124,0x110,0x060,0x2ac,0x1b0,0x2ae,0x25e,0x35c,0x239, // 48 |
466
|
|
|
0x0c1,0x0db,0x081,0x0ba,0x0ec,0x11f,0x0c0,0x307,0x116,0x0ad,0x028,0x17b,0x2c8,0x1cf,0x286,0x308, // 64 |
467
|
|
|
0x0ab,0x1eb,0x129,0x2fb,0x09c,0x2dc,0x05f,0x10e,0x1bf,0x05a,0x1fb,0x030,0x0e4,0x335,0x328,0x382, // 80 |
468
|
|
|
0x310,0x297,0x273,0x17a,0x17e,0x106,0x17c,0x25a,0x2f2,0x150,0x059,0x266,0x057,0x1b0,0x29e,0x268, // 96 |
469
|
|
|
0x09d,0x176,0x0f2,0x2d6,0x258,0x10d,0x177,0x382,0x34d,0x1c6,0x162,0x082,0x32e,0x24b,0x324,0x022, // 112 |
470
|
|
|
0x0d3,0x14a,0x21b,0x129,0x33b,0x361,0x025,0x205,0x342,0x13b,0x226,0x056,0x321,0x004,0x06c,0x21b),// 128 |
471
|
|
|
array( // ECL 7 (256 factors) ----------------------------------------------------------------------------- |
472
|
|
|
0x20c,0x37e,0x04b,0x2fe,0x372,0x359,0x04a,0x0cc,0x052,0x24a,0x2c4,0x0fa,0x389,0x312,0x08a,0x2d0, // 16 |
473
|
|
|
0x35a,0x0c2,0x137,0x391,0x113,0x0be,0x177,0x352,0x1b6,0x2dd,0x0c2,0x118,0x0c9,0x118,0x33c,0x2f5, // 32 |
474
|
|
|
0x2c6,0x32e,0x397,0x059,0x044,0x239,0x00b,0x0cc,0x31c,0x25d,0x21c,0x391,0x321,0x2bc,0x31f,0x089, // 48 |
475
|
|
|
0x1b7,0x1a2,0x250,0x29c,0x161,0x35b,0x172,0x2b6,0x145,0x0f0,0x0d8,0x101,0x11c,0x225,0x0d1,0x374, // 64 |
476
|
|
|
0x13b,0x046,0x149,0x319,0x1ea,0x112,0x36d,0x0a2,0x2ed,0x32c,0x2ac,0x1cd,0x14e,0x178,0x351,0x209, // 80 |
477
|
|
|
0x133,0x123,0x323,0x2c8,0x013,0x166,0x18f,0x38c,0x067,0x1ff,0x033,0x008,0x205,0x0e1,0x121,0x1d6, // 96 |
478
|
|
|
0x27d,0x2db,0x042,0x0ff,0x395,0x10d,0x1cf,0x33e,0x2da,0x1b1,0x350,0x249,0x088,0x21a,0x38a,0x05a, // 112 |
479
|
|
|
0x002,0x122,0x2e7,0x0c7,0x28f,0x387,0x149,0x031,0x322,0x244,0x163,0x24c,0x0bc,0x1ce,0x00a,0x086, // 128 |
480
|
|
|
0x274,0x140,0x1df,0x082,0x2e3,0x047,0x107,0x13e,0x176,0x259,0x0c0,0x25d,0x08e,0x2a1,0x2af,0x0ea, // 144 |
481
|
|
|
0x2d2,0x180,0x0b1,0x2f0,0x25f,0x280,0x1c7,0x0c1,0x2b1,0x2c3,0x325,0x281,0x030,0x03c,0x2dc,0x26d, // 160 |
482
|
|
|
0x37f,0x220,0x105,0x354,0x28f,0x135,0x2b9,0x2f3,0x2f4,0x03c,0x0e7,0x305,0x1b2,0x1a5,0x2d6,0x210, // 176 |
483
|
|
|
0x1f7,0x076,0x031,0x31b,0x020,0x090,0x1f4,0x0ee,0x344,0x18a,0x118,0x236,0x13f,0x009,0x287,0x226, // 192 |
484
|
|
|
0x049,0x392,0x156,0x07e,0x020,0x2a9,0x14b,0x318,0x26c,0x03c,0x261,0x1b9,0x0b4,0x317,0x37d,0x2f2, // 208 |
485
|
|
|
0x25d,0x17f,0x0e4,0x2ed,0x2f8,0x0d5,0x036,0x129,0x086,0x036,0x342,0x12b,0x39a,0x0bf,0x38e,0x214, // 224 |
486
|
|
|
0x261,0x33d,0x0bd,0x014,0x0a7,0x01d,0x368,0x1c1,0x053,0x192,0x029,0x290,0x1f9,0x243,0x1e1,0x0ad, // 240 |
487
|
|
|
0x194,0x0fb,0x2b0,0x05f,0x1f1,0x22b,0x282,0x21f,0x133,0x09f,0x39c,0x22e,0x288,0x037,0x1f1,0x00a),// 256 |
488
|
|
|
array( // ECL 8 (512 factors) ----------------------------------------------------------------------------- |
489
|
|
|
0x160,0x04d,0x175,0x1f8,0x023,0x257,0x1ac,0x0cf,0x199,0x23e,0x076,0x1f2,0x11d,0x17c,0x15e,0x1ec, // 16 |
490
|
|
|
0x0c5,0x109,0x398,0x09b,0x392,0x12b,0x0e5,0x283,0x126,0x367,0x132,0x058,0x057,0x0c1,0x160,0x30d, // 32 |
491
|
|
|
0x34e,0x04b,0x147,0x208,0x1b3,0x21f,0x0cb,0x29a,0x0f9,0x15a,0x30d,0x26d,0x280,0x10c,0x31a,0x216, // 48 |
492
|
|
|
0x21b,0x30d,0x198,0x186,0x284,0x066,0x1dc,0x1f3,0x122,0x278,0x221,0x025,0x35a,0x394,0x228,0x029, // 64 |
493
|
|
|
0x21e,0x121,0x07a,0x110,0x17f,0x320,0x1e5,0x062,0x2f0,0x1d8,0x2f9,0x06b,0x310,0x35c,0x292,0x2e5, // 80 |
494
|
|
|
0x122,0x0cc,0x2a9,0x197,0x357,0x055,0x063,0x03e,0x1e2,0x0b4,0x014,0x129,0x1c3,0x251,0x391,0x08e, // 96 |
495
|
|
|
0x328,0x2ac,0x11f,0x218,0x231,0x04c,0x28d,0x383,0x2d9,0x237,0x2e8,0x186,0x201,0x0c0,0x204,0x102, // 112 |
496
|
|
|
0x0f0,0x206,0x31a,0x18b,0x300,0x350,0x033,0x262,0x180,0x0a8,0x0be,0x33a,0x148,0x254,0x312,0x12f, // 128 |
497
|
|
|
0x23a,0x17d,0x19f,0x281,0x09c,0x0ed,0x097,0x1ad,0x213,0x0cf,0x2a4,0x2c6,0x059,0x0a8,0x130,0x192, // 144 |
498
|
|
|
0x028,0x2c4,0x23f,0x0a2,0x360,0x0e5,0x041,0x35d,0x349,0x200,0x0a4,0x1dd,0x0dd,0x05c,0x166,0x311, // 160 |
499
|
|
|
0x120,0x165,0x352,0x344,0x33b,0x2e0,0x2c3,0x05e,0x008,0x1ee,0x072,0x209,0x002,0x1f3,0x353,0x21f, // 176 |
500
|
|
|
0x098,0x2d9,0x303,0x05f,0x0f8,0x169,0x242,0x143,0x358,0x31d,0x121,0x033,0x2ac,0x1d2,0x215,0x334, // 192 |
501
|
|
|
0x29d,0x02d,0x386,0x1c4,0x0a7,0x156,0x0f4,0x0ad,0x023,0x1cf,0x28b,0x033,0x2bb,0x24f,0x1c4,0x242, // 208 |
502
|
|
|
0x025,0x07c,0x12a,0x14c,0x228,0x02b,0x1ab,0x077,0x296,0x309,0x1db,0x352,0x2fc,0x16c,0x242,0x38f, // 224 |
503
|
|
|
0x11b,0x2c7,0x1d8,0x1a4,0x0f5,0x120,0x252,0x18a,0x1ff,0x147,0x24d,0x309,0x2bb,0x2b0,0x02b,0x198, // 240 |
504
|
|
|
0x34a,0x17f,0x2d1,0x209,0x230,0x284,0x2ca,0x22f,0x03e,0x091,0x369,0x297,0x2c9,0x09f,0x2a0,0x2d9, // 256 |
505
|
|
|
0x270,0x03b,0x0c1,0x1a1,0x09e,0x0d1,0x233,0x234,0x157,0x2b5,0x06d,0x260,0x233,0x16d,0x0b5,0x304, // 272 |
506
|
|
|
0x2a5,0x136,0x0f8,0x161,0x2c4,0x19a,0x243,0x366,0x269,0x349,0x278,0x35c,0x121,0x218,0x023,0x309, // 288 |
507
|
|
|
0x26a,0x24a,0x1a8,0x341,0x04d,0x255,0x15a,0x10d,0x2f5,0x278,0x2b7,0x2ef,0x14b,0x0f7,0x0b8,0x02d, // 304 |
508
|
|
|
0x313,0x2a8,0x012,0x042,0x197,0x171,0x036,0x1ec,0x0e4,0x265,0x33e,0x39a,0x1b5,0x207,0x284,0x389, // 320 |
509
|
|
|
0x315,0x1a4,0x131,0x1b9,0x0cf,0x12c,0x37c,0x33b,0x08d,0x219,0x17d,0x296,0x201,0x038,0x0fc,0x155, // 336 |
510
|
|
|
0x0f2,0x31d,0x346,0x345,0x2d0,0x0e0,0x133,0x277,0x03d,0x057,0x230,0x136,0x2f4,0x299,0x18d,0x328, // 352 |
511
|
|
|
0x353,0x135,0x1d9,0x31b,0x17a,0x01f,0x287,0x393,0x1cb,0x326,0x24e,0x2db,0x1a9,0x0d8,0x224,0x0f9, // 368 |
512
|
|
|
0x141,0x371,0x2bb,0x217,0x2a1,0x30e,0x0d2,0x32f,0x389,0x12f,0x34b,0x39a,0x119,0x049,0x1d5,0x317, // 384 |
513
|
|
|
0x294,0x0a2,0x1f2,0x134,0x09b,0x1a6,0x38b,0x331,0x0bb,0x03e,0x010,0x1a9,0x217,0x150,0x11e,0x1b5, // 400 |
514
|
|
|
0x177,0x111,0x262,0x128,0x0b7,0x39b,0x074,0x29b,0x2ef,0x161,0x03e,0x16e,0x2b3,0x17b,0x2af,0x34a, // 416 |
515
|
|
|
0x025,0x165,0x2d0,0x2e6,0x14a,0x005,0x027,0x39b,0x137,0x1a8,0x0f2,0x2ed,0x141,0x036,0x29d,0x13c, // 432 |
516
|
|
|
0x156,0x12b,0x216,0x069,0x29b,0x1e8,0x280,0x2a0,0x240,0x21c,0x13c,0x1e6,0x2d1,0x262,0x02e,0x290, // 448 |
517
|
|
|
0x1bf,0x0ab,0x268,0x1d0,0x0be,0x213,0x129,0x141,0x2fa,0x2f0,0x215,0x0af,0x086,0x00e,0x17d,0x1b1, // 464 |
518
|
|
|
0x2cd,0x02d,0x06f,0x014,0x254,0x11c,0x2e0,0x08a,0x286,0x19b,0x36d,0x29d,0x08d,0x397,0x02d,0x30c, // 480 |
519
|
|
|
0x197,0x0a4,0x14c,0x383,0x0a5,0x2d6,0x258,0x145,0x1f2,0x28f,0x165,0x2f0,0x300,0x0df,0x351,0x287, // 496 |
520
|
|
|
0x03f,0x136,0x35f,0x0fb,0x16e,0x130,0x11a,0x2e2,0x2a3,0x19a,0x185,0x0f4,0x01f,0x079,0x12f,0x107) // 512 |
521
|
|
|
); |
522
|
|
|
|
523
|
|
|
/** |
524
|
|
|
* This is the class constructor. |
525
|
|
|
* Creates a PDF417 object |
526
|
|
|
* @param $code (string) code to represent using PDF417 |
527
|
|
|
* @param $ecl (int) error correction level (0-8); default -1 = automatic correction level |
528
|
|
|
* @param $aspectratio (float) the width to height of the symbol (excluding quiet zones) |
529
|
|
|
* @param $macro (array) information for macro block |
530
|
|
|
* @public |
531
|
|
|
*/ |
532
|
|
|
public function __construct($code, $ecl=-1, $aspectratio=2, $macro=array()) { |
533
|
|
|
$barcode_array = array(); |
534
|
|
|
if ((is_null($code)) OR ($code == '\0') OR ($code == '')) { |
535
|
|
|
return false; |
536
|
|
|
} |
537
|
|
|
// get the input sequence array |
538
|
|
|
$sequence = $this->getInputSequences($code); |
539
|
|
|
$codewords = array(); // array of code-words |
540
|
|
|
foreach($sequence as $seq) { |
541
|
|
|
$cw = $this->getCompaction($seq[0], $seq[1], true); |
542
|
|
|
$codewords = array_merge($codewords, $cw); |
543
|
|
|
} |
544
|
|
|
if ($codewords[0] == 900) { |
545
|
|
|
// Text Alpha is the default mode, so remove the first code |
546
|
|
|
array_shift($codewords); |
547
|
|
|
} |
548
|
|
|
// count number of codewords |
549
|
|
|
$numcw = count($codewords); |
550
|
|
|
if ($numcw > 925) { |
551
|
|
|
// reached maximum data codeword capacity |
552
|
|
|
return false; |
553
|
|
|
} |
554
|
|
|
// build macro control block codewords |
555
|
|
|
if (!empty($macro)) { |
556
|
|
|
$macrocw = array(); |
557
|
|
|
// beginning of macro control block |
558
|
|
|
$macrocw[] = 928; |
559
|
|
|
// segment index |
560
|
|
|
$cw = $this->getCompaction(902, sprintf('%05d', $macro['segment_index']), false); |
561
|
|
|
$macrocw = array_merge($macrocw, $cw); |
562
|
|
|
// file ID |
563
|
|
|
$cw = $this->getCompaction(900, $macro['file_id'], false); |
564
|
|
|
$macrocw = array_merge($macrocw, $cw); |
565
|
|
|
// optional fields |
566
|
|
|
$optmodes = array(900,902,902,900,900,902,902); |
567
|
|
|
$optsize = array(-1,2,4,-1,-1,-1,2); |
568
|
|
|
foreach ($optmodes as $k => $omode) { |
569
|
|
|
if (isset($macro['option_'.$k])) { |
570
|
|
|
$macrocw[] = 923; |
571
|
|
|
$macrocw[] = $k; |
572
|
|
|
if ($optsize[$k] == 2) { |
573
|
|
|
$macro['option_'.$k] = sprintf('%05d', $macro['option_'.$k]); |
574
|
|
|
} elseif ($optsize[$k] == 4) { |
575
|
|
|
$macro['option_'.$k] = sprintf('%010d', $macro['option_'.$k]); |
576
|
|
|
} |
577
|
|
|
$cw = $this->getCompaction($omode, $macro['option_'.$k], false); |
578
|
|
|
$macrocw = array_merge($macrocw, $cw); |
579
|
|
|
} |
580
|
|
|
} |
581
|
|
|
if ($macro['segment_index'] == ($macro['segment_total'] - 1)) { |
582
|
|
|
// end of control block |
583
|
|
|
$macrocw[] = 922; |
584
|
|
|
} |
585
|
|
|
// update total codewords |
586
|
|
|
$numcw += count($macrocw); |
587
|
|
|
} |
588
|
|
|
// set error correction level |
589
|
|
|
$ecl = $this->getErrorCorrectionLevel($ecl, $numcw); |
590
|
|
|
// number of codewords for error correction |
591
|
|
|
$errsize = (2 << $ecl); |
592
|
|
|
// calculate number of columns (number of codewords per row) and rows |
593
|
|
|
$nce = ($numcw + $errsize + 1); |
594
|
|
|
$cols = round((sqrt(4761 + (68 * $aspectratio * ROWHEIGHT * $nce)) - 69) / 34); |
595
|
|
|
// adjust cols |
596
|
|
|
if ($cols < 1) { |
597
|
|
|
$cols = 1; |
598
|
|
|
} elseif ($cols > 30) { |
599
|
|
|
$cols = 30; |
600
|
|
|
} |
601
|
|
|
$rows = ceil($nce / $cols); |
602
|
|
|
$size = ($cols * $rows); |
603
|
|
|
// adjust rows |
604
|
|
|
if (($rows < 3) OR ($rows > 90)) { |
605
|
|
|
if ($rows < 3) { |
606
|
|
|
$rows = 3; |
607
|
|
|
} elseif ($rows > 90) { |
608
|
|
|
$rows = 90; |
609
|
|
|
} |
610
|
|
|
$cols = ceil($size / $rows); |
611
|
|
|
$size = ($cols * $rows); |
612
|
|
|
} |
613
|
|
|
if ($size > 928) { |
614
|
|
|
// set dimensions to get maximum capacity |
615
|
|
|
if (abs($aspectratio - (17 * 29 / 32)) < abs($aspectratio - (17 * 16 / 58))) { |
616
|
|
|
$cols = 29; |
617
|
|
|
$rows = 32; |
618
|
|
|
} else { |
619
|
|
|
$cols = 16; |
620
|
|
|
$rows = 58; |
621
|
|
|
} |
622
|
|
|
$size = 928; |
623
|
|
|
} |
624
|
|
|
// calculate padding |
625
|
|
|
$pad = ($size - $nce); |
626
|
|
|
if ($pad > 0) { |
627
|
|
|
if (($size - $rows) == $nce) { |
628
|
|
|
--$rows; |
629
|
|
|
$size -= $rows; |
630
|
|
|
} else { |
631
|
|
|
// add pading |
632
|
|
|
$codewords = array_merge($codewords, array_fill(0, $pad, 900)); |
633
|
|
|
} |
634
|
|
|
} |
635
|
|
|
if (!empty($macro)) { |
636
|
|
|
// add macro section |
637
|
|
|
$codewords = array_merge($codewords, $macrocw); |
638
|
|
|
} |
639
|
|
|
// Symbol Lenght Descriptor (number of data codewords including Symbol Lenght Descriptor and pad codewords) |
640
|
|
|
$sld = $size - $errsize; |
641
|
|
|
// add symbol length description |
642
|
|
|
array_unshift($codewords, $sld); |
643
|
|
|
// calculate error correction |
644
|
|
|
$ecw = $this->getErrorCorrection($codewords, $ecl); |
645
|
|
|
// add error correction codewords |
646
|
|
|
$codewords = array_merge($codewords, $ecw); |
647
|
|
|
// add horizontal quiet zones to start and stop patterns |
648
|
|
|
$pstart = str_repeat('0', QUIETH).$this->start_pattern; |
649
|
|
|
$pstop = $this->stop_pattern.str_repeat('0', QUIETH); |
650
|
|
|
$barcode_array['num_rows'] = ($rows * ROWHEIGHT) + (2 * QUIETV); |
651
|
|
|
$barcode_array['num_cols'] = (($cols + 2) * 17) + 35 + (2 * QUIETH); |
652
|
|
|
$barcode_array['bcode'] = array(); |
653
|
|
|
// build rows for vertical quiet zone |
654
|
|
|
if (QUIETV > 0) { |
655
|
|
|
$empty_row = array_fill(0, $barcode_array['num_cols'], 0); |
656
|
|
View Code Duplication |
for ($i = 0; $i < QUIETV; ++$i) { |
657
|
|
|
// add vertical quiet rows |
658
|
|
|
$barcode_array['bcode'][] = $empty_row; |
659
|
|
|
} |
660
|
|
|
} |
661
|
|
|
$k = 0; // codeword index |
662
|
|
|
$cid = 0; // initial cluster |
663
|
|
|
// for each row |
664
|
|
|
for ($r = 0; $r < $rows; ++$r) { |
665
|
|
|
// row start code |
666
|
|
|
$row = $pstart; |
667
|
|
View Code Duplication |
switch ($cid) { |
668
|
|
|
case 0: { |
669
|
|
|
$L = ((30 * intval($r / 3)) + intval(($rows - 1) / 3)); |
670
|
|
|
break; |
671
|
|
|
} |
672
|
|
|
case 1: { |
673
|
|
|
$L = ((30 * intval($r / 3)) + ($ecl * 3) + (($rows - 1) % 3)); |
674
|
|
|
break; |
675
|
|
|
} |
676
|
|
|
case 2: { |
677
|
|
|
$L = ((30 * intval($r / 3)) + ($cols - 1)); |
678
|
|
|
break; |
679
|
|
|
} |
680
|
|
|
} |
681
|
|
|
// left row indicator |
682
|
|
|
$row .= sprintf('%17b', $this->clusters[$cid][$L]); |
683
|
|
|
// for each column |
684
|
|
|
for ($c = 0; $c < $cols; ++$c) { |
685
|
|
|
$row .= sprintf('%17b', $this->clusters[$cid][$codewords[$k]]); |
686
|
|
|
++$k; |
687
|
|
|
} |
688
|
|
View Code Duplication |
switch ($cid) { |
689
|
|
|
case 0: { |
690
|
|
|
$L = ((30 * intval($r / 3)) + ($cols - 1)); |
691
|
|
|
break; |
692
|
|
|
} |
693
|
|
|
case 1: { |
694
|
|
|
$L = ((30 * intval($r / 3)) + intval(($rows - 1) / 3)); |
695
|
|
|
break; |
696
|
|
|
} |
697
|
|
|
case 2: { |
698
|
|
|
$L = ((30 * intval($r / 3)) + ($ecl * 3) + (($rows - 1) % 3)); |
699
|
|
|
break; |
700
|
|
|
} |
701
|
|
|
} |
702
|
|
|
// right row indicator |
703
|
|
|
$row .= sprintf('%17b', $this->clusters[$cid][$L]); |
704
|
|
|
// row stop code |
705
|
|
|
$row .= $pstop; |
706
|
|
|
// convert the string to array |
707
|
|
|
$arow = preg_split('//', $row, -1, PREG_SPLIT_NO_EMPTY); |
708
|
|
|
// duplicate row to get the desired height |
709
|
|
|
for ($h = 0; $h < ROWHEIGHT; ++$h) { |
710
|
|
|
$barcode_array['bcode'][] = $arow; |
711
|
|
|
} |
712
|
|
|
++$cid; |
713
|
|
|
if ($cid > 2) { |
714
|
|
|
$cid = 0; |
715
|
|
|
} |
716
|
|
|
} |
717
|
|
|
if (QUIETV > 0) { |
718
|
|
View Code Duplication |
for ($i = 0; $i < QUIETV; ++$i) { |
719
|
|
|
// add vertical quiet rows |
720
|
|
|
$barcode_array['bcode'][] = $empty_row; |
721
|
|
|
} |
722
|
|
|
} |
723
|
|
|
$this->barcode_array = $barcode_array; |
724
|
|
|
} |
725
|
|
|
|
726
|
|
|
/** |
727
|
|
|
* Returns a barcode array which is readable by TCPDF |
728
|
|
|
* @return array barcode array readable by TCPDF; |
729
|
|
|
* @public |
730
|
|
|
*/ |
731
|
|
|
public function getBarcodeArray() { |
732
|
|
|
return $this->barcode_array; |
733
|
|
|
} |
734
|
|
|
|
735
|
|
|
/** |
736
|
|
|
* Returns the error correction level (0-8) to be used |
737
|
|
|
* @param $ecl (int) error correction level |
738
|
|
|
* @param $numcw (int) number of data codewords |
739
|
|
|
* @return int error correction level |
740
|
|
|
* @protected |
741
|
|
|
*/ |
742
|
|
|
protected function getErrorCorrectionLevel($ecl, $numcw) { |
743
|
|
|
// get maximum correction level |
744
|
|
|
$maxecl = 8; // starting error level |
745
|
|
|
$maxerrsize = (928 - $numcw); // available codewords for error |
746
|
|
|
while ($maxecl > 0) { |
747
|
|
|
$errsize = (2 << $ecl); |
748
|
|
|
if ($maxerrsize >= $errsize) { |
749
|
|
|
break; |
750
|
|
|
} |
751
|
|
|
--$maxecl; |
752
|
|
|
} |
753
|
|
|
// check for automatic levels |
754
|
|
|
if (($ecl < 0) OR ($ecl > 8)) { |
755
|
|
|
if ($numcw < 41) { |
756
|
|
|
$ecl = 2; |
757
|
|
|
} elseif ($numcw < 161) { |
758
|
|
|
$ecl = 3; |
759
|
|
|
} elseif ($numcw < 321) { |
760
|
|
|
$ecl = 4; |
761
|
|
|
} elseif ($numcw < 864) { |
762
|
|
|
$ecl = 5; |
763
|
|
|
} else { |
764
|
|
|
$ecl = $maxecl; |
765
|
|
|
} |
766
|
|
|
} |
767
|
|
|
if ($ecl > $maxecl) { |
768
|
|
|
$ecl = $maxecl; |
769
|
|
|
} |
770
|
|
|
return $ecl; |
771
|
|
|
} |
772
|
|
|
|
773
|
|
|
/** |
774
|
|
|
* Returns the error correction codewords |
775
|
|
|
* @param $cw (array) array of codewords including Symbol Lenght Descriptor and pad |
776
|
|
|
* @param $ecl (int) error correction level 0-8 |
777
|
|
|
* @return array of error correction codewords |
778
|
|
|
* @protected |
779
|
|
|
*/ |
780
|
|
|
protected function getErrorCorrection($cw, $ecl) { |
781
|
|
|
// get error correction coefficients |
782
|
|
|
$ecc = $this->rsfactors[$ecl]; |
783
|
|
|
// number of error correction factors |
784
|
|
|
$eclsize = (2 << $ecl); |
785
|
|
|
// maximum index for $rsfactors[$ecl] |
|
|
|
|
786
|
|
|
$eclmaxid = ($eclsize - 1); |
787
|
|
|
// initialize array of error correction codewords |
788
|
|
|
$ecw = array_fill(0, $eclsize, 0); |
789
|
|
|
// for each data codeword |
790
|
|
|
foreach($cw as $k => $d) { |
791
|
|
|
$t1 = ($d + $ecw[$eclmaxid]) % 929; |
792
|
|
|
for ($j = $eclmaxid; $j > 0; --$j) { |
793
|
|
|
$t2 = ($t1 * $ecc[$j]) % 929; |
794
|
|
|
$t3 = 929 - $t2; |
795
|
|
|
$ecw[$j] = ($ecw[($j - 1)] + $t3) % 929; |
796
|
|
|
} |
797
|
|
|
$t2 = ($t1 * $ecc[0]) % 929; |
798
|
|
|
$t3 = 929 - $t2; |
799
|
|
|
$ecw[0] = $t3 % 929; |
800
|
|
|
} |
801
|
|
|
foreach($ecw as $j => $e) { |
802
|
|
|
if ($e != 0) { |
803
|
|
|
$ecw[$j] = 929 - $e; |
804
|
|
|
} |
805
|
|
|
} |
806
|
|
|
$ecw = array_reverse($ecw); |
807
|
|
|
return $ecw; |
808
|
|
|
} |
809
|
|
|
|
810
|
|
|
/** |
811
|
|
|
* Create array of sequences from input |
812
|
|
|
* @param $code (string) code |
813
|
|
|
* @return bidimensional array containing characters and classification |
814
|
|
|
* @protected |
815
|
|
|
*/ |
816
|
|
|
protected function getInputSequences($code) { |
817
|
|
|
$sequence_array = array(); // array to be returned |
818
|
|
|
$numseq = array(); |
819
|
|
|
// get numeric sequences |
820
|
|
|
preg_match_all('/([0-9]{13,44})/', $code, $numseq, PREG_OFFSET_CAPTURE); |
821
|
|
|
$numseq[1][] = array('', strlen($code)); |
822
|
|
|
$offset = 0; |
823
|
|
|
foreach($numseq[1] as $seq) { |
824
|
|
|
$seqlen = strlen($seq[0]); |
825
|
|
|
if ($seq[1] > 0) { |
826
|
|
|
// extract text sequence before the number sequence |
827
|
|
|
$prevseq = substr($code, $offset, ($seq[1] - $offset)); |
828
|
|
|
$textseq = array(); |
829
|
|
|
// get text sequences |
830
|
|
|
preg_match_all('/([\x09\x0a\x0d\x20-\x7e]{5,})/', $prevseq, $textseq, PREG_OFFSET_CAPTURE); |
831
|
|
|
$textseq[1][] = array('', strlen($prevseq)); |
832
|
|
|
$txtoffset = 0; |
833
|
|
|
foreach($textseq[1] as $txtseq) { |
834
|
|
|
$txtseqlen = strlen($txtseq[0]); |
835
|
|
|
if ($txtseq[1] > 0) { |
836
|
|
|
// extract byte sequence before the text sequence |
837
|
|
|
$prevtxtseq = substr($prevseq, $txtoffset, ($txtseq[1] - $txtoffset)); |
838
|
|
|
if (strlen($prevtxtseq) > 0) { |
839
|
|
|
// add BYTE sequence |
840
|
|
|
if ((strlen($prevtxtseq) == 1) AND ((count($sequence_array) > 0) AND ($sequence_array[(count($sequence_array) - 1)][0] == 900))) { |
841
|
|
|
$sequence_array[] = array(913, $prevtxtseq); |
842
|
|
|
} elseif ((strlen($prevtxtseq) % 6) == 0) { |
843
|
|
|
$sequence_array[] = array(924, $prevtxtseq); |
844
|
|
|
} else { |
845
|
|
|
$sequence_array[] = array(901, $prevtxtseq); |
846
|
|
|
} |
847
|
|
|
} |
848
|
|
|
} |
849
|
|
|
if ($txtseqlen > 0) { |
850
|
|
|
// add numeric sequence |
851
|
|
|
$sequence_array[] = array(900, $txtseq[0]); |
852
|
|
|
} |
853
|
|
|
$txtoffset = $txtseq[1] + $txtseqlen; |
854
|
|
|
} |
855
|
|
|
} |
856
|
|
|
if ($seqlen > 0) { |
857
|
|
|
// add numeric sequence |
858
|
|
|
$sequence_array[] = array(902, $seq[0]); |
859
|
|
|
} |
860
|
|
|
$offset = $seq[1] + $seqlen; |
861
|
|
|
} |
862
|
|
|
return $sequence_array; |
863
|
|
|
} |
864
|
|
|
|
865
|
|
|
/** |
866
|
|
|
* Compact data by mode. |
867
|
|
|
* @param $mode (int) compaction mode number |
868
|
|
|
* @param $code (string) data to compact |
869
|
|
|
* @param $addmode (boolean) if true add the mode codeword at first position |
870
|
|
|
* @return array of codewords |
871
|
|
|
* @protected |
872
|
|
|
*/ |
873
|
|
|
protected function getCompaction($mode, $code, $addmode=true) { |
874
|
|
|
$cw = array(); // array of codewords to return |
875
|
|
|
switch($mode) { |
876
|
|
|
case 900: { // Text Compaction mode latch |
877
|
|
|
$submode = 0; // default Alpha sub-mode |
878
|
|
|
$txtarr = array(); // array of characters and sub-mode switching characters |
879
|
|
|
$codelen = strlen($code); |
880
|
|
|
for ($i = 0; $i < $codelen; ++$i) { |
881
|
|
|
$chval = ord($code{$i}); |
882
|
|
|
if (($k = array_search($chval, $this->textsubmodes[$submode])) !== false) { |
883
|
|
|
// we are on the same sub-mode |
884
|
|
|
$txtarr[] = $k; |
885
|
|
|
} else { |
886
|
|
|
// the sub-mode is changed |
887
|
|
|
for ($s = 0; $s < 4; ++$s) { |
888
|
|
|
// search new sub-mode |
889
|
|
|
if (($s != $submode) AND (($k = array_search($chval, $this->textsubmodes[$s])) !== false)) { |
890
|
|
|
// $s is the new submode |
891
|
|
|
if (((($i + 1) == $codelen) OR ((($i + 1) < $codelen) AND (array_search(ord($code{($i + 1)}), $this->textsubmodes[$submode]) !== false))) AND (($s == 3) OR (($s == 0) AND ($submode == 1)))) { |
892
|
|
|
// shift (temporary change only for this char) |
893
|
|
|
if ($s == 3) { |
894
|
|
|
// shift to puntuaction |
895
|
|
|
$txtarr[] = 29; |
896
|
|
|
} else { |
897
|
|
|
// shift from lower to alpha |
898
|
|
|
$txtarr[] = 27; |
899
|
|
|
} |
900
|
|
|
} else { |
901
|
|
|
// latch |
902
|
|
|
$txtarr = array_merge($txtarr, $this->textlatch[''.$submode.$s]); |
903
|
|
|
// set new submode |
904
|
|
|
$submode = $s; |
905
|
|
|
} |
906
|
|
|
// add characted code to array |
907
|
|
|
$txtarr[] = $k; |
908
|
|
|
break; |
909
|
|
|
} |
910
|
|
|
} |
911
|
|
|
} |
912
|
|
|
} |
913
|
|
|
$txtarrlen = count($txtarr); |
914
|
|
|
if (($txtarrlen % 2) != 0) { |
915
|
|
|
// add padding |
916
|
|
|
$txtarr[] = 29; |
917
|
|
|
++$txtarrlen; |
918
|
|
|
} |
919
|
|
|
// calculate codewords |
920
|
|
|
for ($i = 0; $i < $txtarrlen; $i += 2) { |
921
|
|
|
$cw[] = (30 * $txtarr[$i]) + $txtarr[($i + 1)]; |
922
|
|
|
} |
923
|
|
|
break; |
924
|
|
|
} |
925
|
|
|
case 901: |
926
|
|
|
case 924: { // Byte Compaction mode latch |
927
|
|
|
while (($codelen = strlen($code)) > 0) { |
928
|
|
|
if ($codelen > 6) { |
929
|
|
|
$rest = substr($code, 6); |
930
|
|
|
$code = substr($code, 0, 6); |
931
|
|
|
$sublen = 6; |
932
|
|
|
} else { |
933
|
|
|
$rest = ''; |
934
|
|
|
$sublen = strlen($code); |
935
|
|
|
} |
936
|
|
|
if ($sublen == 6) { |
937
|
|
|
$t = bcmul(''.ord($code[0]), '1099511627776'); |
938
|
|
|
$t = bcadd($t, bcmul(''.ord($code[1]), '4294967296')); |
939
|
|
|
$t = bcadd($t, bcmul(''.ord($code[2]), '16777216')); |
940
|
|
|
$t = bcadd($t, bcmul(''.ord($code[3]), '65536')); |
941
|
|
|
$t = bcadd($t, bcmul(''.ord($code[4]), '256')); |
942
|
|
|
$t = bcadd($t, ''.ord($code[5])); |
943
|
|
|
// tmp array for the 6 bytes block |
944
|
|
|
$cw6 = array(); |
945
|
|
View Code Duplication |
do { |
946
|
|
|
$d = bcmod($t, '900'); |
947
|
|
|
$t = bcdiv($t, '900'); |
948
|
|
|
// prepend the value to the beginning of the array |
949
|
|
|
array_unshift($cw6, $d); |
950
|
|
|
} while ($t != '0'); |
951
|
|
|
// append the result array at the end |
952
|
|
|
$cw = array_merge($cw, $cw6); |
953
|
|
|
} else { |
954
|
|
|
for ($i = 0; $i < $sublen; ++$i) { |
955
|
|
|
$cw[] = ord($code{$i}); |
956
|
|
|
} |
957
|
|
|
} |
958
|
|
|
$code = $rest; |
959
|
|
|
} |
960
|
|
|
break; |
961
|
|
|
} |
962
|
|
|
case 902: { // Numeric Compaction mode latch |
963
|
|
|
while (($codelen = strlen($code)) > 0) { |
964
|
|
|
if ($codelen > 44) { |
965
|
|
|
$rest = substr($code, 44); |
966
|
|
|
$code = substr($code, 0, 44); |
967
|
|
|
} else { |
968
|
|
|
$rest = ''; |
969
|
|
|
} |
970
|
|
|
$t = '1'.$code; |
971
|
|
View Code Duplication |
do { |
972
|
|
|
$d = bcmod($t, '900'); |
973
|
|
|
$t = bcdiv($t, '900'); |
974
|
|
|
array_unshift($cw, $d); |
975
|
|
|
} while ($t != '0'); |
976
|
|
|
$code = $rest; |
977
|
|
|
} |
978
|
|
|
break; |
979
|
|
|
} |
980
|
|
|
case 913: { // Byte Compaction mode shift |
981
|
|
|
$cw[] = ord($code); |
982
|
|
|
break; |
983
|
|
|
} |
984
|
|
|
} |
985
|
|
|
if ($addmode) { |
986
|
|
|
// add the compaction mode codeword at the beginning |
987
|
|
|
array_unshift($cw, $mode); |
988
|
|
|
} |
989
|
|
|
return $cw; |
990
|
|
|
} |
991
|
|
|
|
992
|
|
|
} // end PDF417 class |
993
|
|
|
|
994
|
|
|
//============================================================+ |
995
|
|
|
// END OF FILE |
996
|
|
|
//============================================================+ |
997
|
|
|
|
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.