-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqr_tables.py
136 lines (122 loc) · 11.1 KB
/
qr_tables.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#
# OpenQR qr_tables.py
# By: Carbon
#
# Holds the table constants for use in qr_encode
# Turns out there isn't really a formula for calculating the version thresholds.
# So we just hardcode this table. It's not perfect but it works.
#
# Table Guide:
# - Each table corresponds to the thresholds for a given correction mode
# - Rows correspond to version, e.g. low_thresholds[0] corresponds to version 1 (bc 0 indexing)
# - Cols correspond to the character encoding modes: [numeric, alphanumeric, byte, kanji]
# - e.g. low_thresholds[0][2] corresponds to the threshold for byte encoding for version 1
thresholds_low = [[41, 25, 17, 10], [77, 47, 32, 20], [127, 77, 53, 32], [187, 114, 78, 48], [255, 154, 106, 65],
[322, 195, 134, 82], [370, 224, 154, 95], [461, 279, 192, 118], [552, 335, 230, 141],
[652, 395, 271, 167], [772, 468, 321, 198], [883, 535, 367, 226], [1022, 619, 425, 262],
[1101, 667, 458, 282], [1250, 758, 520, 320], [1408, 854, 586, 361], [1548, 938, 644, 397],
[1725, 1046, 718, 442], [1903, 1153, 792, 488], [2061, 1249, 858, 528], [2232, 1352, 929, 572],
[2409, 1460, 1003, 618], [2620, 1588, 1091, 672], [2812, 1704, 1171, 721], [3057, 1853, 1273, 784],
[3283, 1990, 1367, 842], [3517, 2132, 1465, 902], [3669, 2223, 1528, 940], [3909, 2369, 1628, 1002],
[4158, 2520, 1732, 1066], [4417, 2677, 1840, 1132], [4686, 2840, 1952, 1201],
[4965, 3009, 2068, 1273], [5253, 3183, 2188, 1347], [5529, 3351, 2303, 1417],
[5836, 3537, 2431, 1496], [6153, 3729, 2563, 1577], [6479, 3927, 2699, 1661],
[6743, 4087, 2809, 1729], [7089, 4296, 2953, 1817]]
thresholds_medium = [[34, 20, 14, 8], [63, 38, 26, 16], [101, 61, 42, 26], [149, 90, 62, 38], [202, 122, 84, 52],
[255, 154, 106, 65], [293, 178, 122, 75], [365, 221, 152, 93], [432, 262, 180, 111],
[513, 311, 213, 131], [604, 366, 251, 155], [691, 419, 287, 177], [796, 483, 331, 204],
[871, 528, 362, 223], [991, 600, 412, 254], [1082, 656, 450, 277], [1212, 734, 504, 310],
[1346, 816, 560, 345], [1500, 909, 624, 384], [1600, 970, 666, 410], [1708, 1035, 711, 438],
[1872, 1134, 779, 480], [2059, 1248, 857, 528], [2188, 1326, 911, 561], [2395, 1451, 997, 614],
[2544, 1542, 1059, 652], [2701, 1637, 1125, 692], [2857, 1732, 1190, 732], [3035, 1839, 1264, 778],
[3289, 1994, 1370, 843], [3486, 2113, 1452, 894], [3693, 2238, 1538, 947],
[3909, 2369, 1628, 1002], [4134, 2506, 1722, 1060], [4343, 2632, 1809, 1113],
[4588, 2780, 1911, 1176], [4775, 2894, 1989, 1224], [5039, 3054, 2099, 1292],
[5313, 3220, 2213, 1362], [5596, 3391, 2331, 1435]]
thresholds_quartile = [[27, 16, 11, 7], [48, 29, 20, 12], [77, 47, 32, 20], [111, 67, 46, 28], [144, 87, 60, 37],
[178, 108, 74, 45], [207, 125, 86, 53], [259, 157, 108, 66], [312, 189, 130, 80],
[364, 221, 151, 93], [427, 259, 177, 109], [489, 296, 203, 125], [580, 352, 241, 149],
[621, 376, 258, 159], [703, 426, 292, 180], [775, 470, 322, 198], [876, 531, 364, 224],
[948, 574, 394, 243], [1063, 644, 442, 272], [1159, 702, 482, 297], [1224, 742, 509, 314],
[1358, 823, 565, 348], [1468, 890, 611, 376], [1588, 963, 661, 407], [1718, 1041, 715, 440],
[1804, 1094, 751, 462], [1933, 1172, 805, 496], [2085, 1263, 868, 534], [2181, 1322, 908, 559],
[2358, 1429, 982, 604], [2473, 1499, 1030, 634], [2670, 1618, 1112, 684],
[2805, 1700, 1168, 719], [2949, 1787, 1228, 756], [3081, 1867, 1283, 790],
[3244, 1966, 1351, 832], [3417, 2071, 1423, 876], [3599, 2181, 1499, 923],
[3791, 2298, 1579, 972], [3993, 2420, 1663, 1024]]
thresholds_high = [[17, 10, 7, 4], [34, 20, 14, 8], [58, 35, 24, 15], [82, 50, 34, 21], [106, 64, 44, 27],
[139, 84, 58, 36], [154, 93, 64, 39], [202, 122, 84, 52], [235, 143, 98, 60], [288, 174, 119, 74],
[331, 200, 137, 85], [374, 227, 155, 96], [427, 259, 177, 109], [468, 283, 194, 120],
[530, 321, 220, 136], [602, 365, 250, 154], [674, 408, 280, 173], [746, 452, 310, 191],
[813, 493, 338, 208], [919, 557, 382, 235], [969, 587, 403, 248], [1056, 640, 439, 270],
[1108, 672, 461, 284], [1228, 744, 511, 315], [1286, 779, 535, 330], [1425, 864, 593, 365],
[1501, 910, 625, 385], [1581, 958, 658, 405], [1677, 1016, 698, 430], [1782, 1080, 742, 457],
[1897, 1150, 790, 486], [2022, 1226, 842, 518], [2157, 1307, 898, 553], [2301, 1394, 958, 590],
[2361, 1431, 983, 605], [2524, 1530, 1051, 647], [2625, 1591, 1093, 673], [2735, 1658, 1139, 701],
[2927, 1774, 1219, 750], [3057, 1852, 1273, 784]]
indicator_bits = [
[10, 9, 8, 8],
[12, 11, 16, 10],
[14, 13, 16, 12]
]
# Codeword capacity for each version
codewords_low = [19, 34, 55, 80, 108, 136, 156, 194, 232, 274, 324, 370, 428, 461, 523, 589, 647, 721, 795, 861, 932,
1006, 1094, 1174, 1276, 1370, 1468, 1531, 1631, 1735, 1843, 1955, 2071, 2191, 2306, 2434, 2566, 2702,
2812, 2956]
codewords_medium = [16, 28, 44, 64, 86, 108, 124, 154, 182, 216, 254, 290, 334, 365, 415, 453, 507, 563, 627, 669, 714,
782, 860, 914, 1000, 1062, 1128, 1193, 1267, 1373, 1455, 1541, 1631, 1725, 1812, 1914, 1992, 2102,
2216, 2334]
codewords_quartile = [13, 22, 34, 48, 62, 76, 88, 110, 132, 154, 180, 206, 244, 261, 295, 325, 367, 397, 445, 485, 512,
568, 614, 664, 718, 754, 808, 871, 911, 985, 1033, 1115, 1171, 1231, 1286, 1354, 1426, 1502, 1582,
1666]
codewords_high = [9, 16, 26, 36, 46, 60, 66, 86, 100, 122, 140, 158, 180, 197, 223, 253, 283, 313, 341, 385, 406, 442,
464, 514, 538, 596, 628, 661, 701, 745, 793, 845, 901, 961, 986, 1054, 1096, 1142, 1222, 1276]
# Tables for breaking up codewords into groups and blocks.
# Row
# [Total codewords, EC Codewords per block, Data blocks in G1, Codewords per G1 block, Data blocks in G2,
# Codewords per G2 block]
ec_low = [[19, 7, 1, 19, -1, -1], [34, 10, 1, 34, -1, -1], [55, 15, 1, 55, -1, -1], [80, 20, 1, 80, -1, -1],
[108, 26, 1, 108, -1, -1], [136, 18, 2, 68, -1, -1], [156, 20, 2, 78, -1, -1], [194, 24, 2, 97, -1, -1],
[232, 30, 2, 116, -1, -1], [274, 18, 2, 68, 2, 69], [324, 20, 4, 81, -1, -1], [370, 24, 2, 92, 2, 93],
[428, 26, 4, 107, -1, -1], [461, 30, 3, 115, 1, 116], [523, 22, 5, 87, 1, 88], [589, 24, 5, 98, 1, 99],
[647, 28, 1, 107, 5, 108], [721, 30, 5, 120, 1, 121], [795, 28, 3, 113, 4, 114], [861, 28, 3, 107, 5, 108],
[932, 28, 4, 116, 4, 117], [1006, 28, 2, 111, 7, 112], [1094, 30, 4, 121, 5, 122], [1174, 30, 6, 117, 4, 118],
[1276, 26, 8, 106, 4, 107], [1370, 28, 10, 114, 2, 115], [1468, 30, 8, 122, 4, 123],
[1531, 30, 3, 117, 10, 118], [1631, 30, 7, 116, 7, 117], [1735, 30, 5, 115, 10, 116],
[1843, 30, 13, 115, 3, 116], [1955, 30, 17, 115, -1, -1], [2071, 30, 17, 115, 1, 116],
[2191, 30, 13, 115, 6, 116], [2306, 30, 12, 121, 7, 122], [2434, 30, 6, 121, 14, 122],
[2566, 30, 17, 122, 4, 123], [2702, 30, 4, 122, 18, 123], [2812, 30, 20, 117, 4, 118],
[2956, 30, 19, 118, 6, 119]]
ec_medium = [[16, 10, 1, 16, -1, -1], [28, 16, 1, 28, -1, -1], [44, 26, 1, 44, -1, -1], [64, 18, 2, 32, -1, -1],
[86, 24, 2, 43, -1, -1], [108, 16, 4, 27, -1, -1], [124, 18, 4, 31, -1, -1], [154, 22, 2, 38, 2, 39],
[182, 22, 3, 36, 2, 37], [216, 26, 4, 43, 1, 44], [254, 30, 1, 50, 4, 51], [290, 22, 6, 36, 2, 37],
[334, 22, 8, 37, 1, 38], [365, 24, 4, 40, 5, 41], [415, 24, 5, 41, 5, 42], [453, 28, 7, 45, 3, 46],
[507, 28, 10, 46, 1, 47], [563, 26, 9, 43, 4, 44], [627, 26, 3, 44, 11, 45], [669, 26, 3, 41, 13, 42],
[714, 26, 17, 42, -1, -1], [782, 28, 17, 46, -1, -1], [860, 28, 4, 47, 14, 48], [914, 28, 6, 45, 14, 46],
[1000, 28, 8, 47, 13, 48], [1062, 28, 19, 46, 4, 47], [1128, 28, 22, 45, 3, 46], [1193, 28, 3, 45, 23, 46],
[1267, 28, 21, 45, 7, 46], [1373, 28, 19, 47, 10, 48], [1455, 28, 2, 46, 29, 47],
[1541, 28, 10, 46, 23, 47], [1631, 28, 14, 46, 21, 47], [1725, 28, 14, 46, 23, 47],
[1812, 28, 12, 47, 26, 48], [1914, 28, 6, 47, 34, 48], [1992, 28, 29, 46, 14, 47],
[2102, 28, 13, 46, 32, 47], [2216, 28, 40, 47, 7, 48], [2334, 28, 18, 47, 31, 48]]
ec_quartile = [[13, 13, 1, 13, -1, -1], [22, 22, 1, 22, -1, -1], [34, 18, 2, 17, -1, -1], [48, 26, 2, 24, -1, -1],
[62, 18, 2, 15, 2, 16], [76, 24, 4, 19, -1, -1], [88, 18, 2, 14, 4, 15], [110, 22, 4, 18, 2, 19],
[132, 20, 4, 16, 4, 17], [154, 24, 6, 19, 2, 20], [180, 28, 4, 22, 4, 23], [206, 26, 4, 20, 6, 21],
[244, 24, 8, 20, 4, 21], [261, 20, 11, 16, 5, 17], [295, 30, 5, 24, 7, 25], [325, 24, 15, 19, 2, 20],
[367, 28, 1, 22, 15, 23], [397, 28, 17, 22, 1, 23], [445, 26, 17, 21, 4, 22], [485, 30, 15, 24, 5, 25],
[512, 28, 17, 22, 6, 23], [568, 30, 7, 24, 16, 25], [614, 30, 11, 24, 14, 25], [664, 30, 11, 24, 16, 25],
[718, 30, 7, 24, 22, 25], [754, 28, 28, 22, 6, 23], [808, 30, 8, 23, 26, 24], [871, 30, 4, 24, 31, 25],
[911, 30, 1, 23, 37, 24], [985, 30, 15, 24, 25, 25], [1033, 30, 42, 24, 1, 25],
[1115, 30, 10, 24, 35, 25], [1171, 30, 29, 24, 19, 25], [1231, 30, 44, 24, 7, 25],
[1286, 30, 39, 24, 14, 25], [1354, 30, 46, 24, 10, 25], [1426, 30, 49, 24, 10, 25],
[1502, 30, 48, 24, 14, 25], [1582, 30, 43, 24, 22, 25], [1666, 30, 34, 24, 34, 25]]
ec_high = [[9, 17, 1, 9, -1, -1], [16, 28, 1, 16, -1, -1], [26, 22, 2, 13, -1, -1], [36, 16, 4, 9, -1, -1],
[46, 22, 2, 11, 2, 12], [60, 28, 4, 15, -1, -1], [66, 26, 4, 13, 1, 14], [86, 26, 4, 14, 2, 15],
[100, 24, 4, 12, 4, 13], [122, 28, 6, 15, 2, 16], [140, 24, 3, 12, 8, 13], [158, 28, 7, 14, 4, 15],
[180, 22, 12, 11, 4, 12], [197, 24, 11, 12, 5, 13], [223, 24, 11, 12, 7, 13], [253, 30, 3, 15, 13, 16],
[283, 28, 2, 14, 17, 15], [313, 28, 2, 14, 19, 15], [341, 26, 9, 13, 16, 14], [385, 28, 15, 15, 10, 16],
[406, 30, 19, 16, 6, 17], [442, 24, 34, 13, -1, -1], [464, 30, 16, 15, 14, 16], [514, 30, 30, 16, 2, 17],
[538, 30, 22, 15, 13, 16], [596, 30, 33, 16, 4, 17], [628, 30, 12, 15, 28, 16], [661, 30, 11, 15, 31, 16],
[701, 30, 19, 15, 26, 16], [745, 30, 23, 15, 25, 16], [793, 30, 23, 15, 28, 16], [845, 30, 19, 15, 35, 16],
[901, 30, 11, 15, 46, 16], [961, 30, 59, 16, 1, 17], [986, 30, 22, 15, 41, 16], [1054, 30, 2, 15, 64, 16],
[1096, 30, 24, 15, 46, 16], [1142, 30, 42, 15, 32, 16], [1222, 30, 10, 15, 67, 16],
[1276, 30, 20, 15, 61, 16]]