authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-02-28 15:10:01 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2026-02-28 15:10:01 -08:00
log06f7340675b359ec37eb44486221b6800b7db7c1
tree93899c2a25cccc82343ff3ac0d6ba22fd8bec10d
parent2f7ad3d5f8d1d233e65ae08cf03c60564914b1df

fix version 25


2 files changed, 96 insertions(+), 6 deletions(-)

qrcode.zig+2-6
...@@ -139,7 +139,7 @@ pub fn encode(comptime mode: Mode, comptime level: Level, comptime version: u16,...@@ -139,7 +139,7 @@ pub fn encode(comptime mode: Mode, comptime level: Level, comptime version: u16,
139 for (message_polynomial, 0..) |x, i| mp[i] = to_alpha(.{@bitReverse(x)})[0];139 for (message_polynomial, 0..) |x, i| mp[i] = to_alpha(.{@bitReverse(x)})[0];
140140
141 for (0..groupOneDataCodewordsCountPerBlock) |i| {141 for (0..groupOneDataCodewordsCountPerBlock) |i| {
142 const lead = mp[i].?;142 const lead = mp[i] orelse 0;
143 for (&generator_polynomial_alpha, 0..) |x, j| {143 for (&generator_polynomial_alpha, 0..) |x, j| {
144 var y = GF[(@as(usize, x) + lead) % 255];144 var y = GF[(@as(usize, x) + lead) % 255];
145 if (mp[i + j]) |z| y ^= GF[z];145 if (mp[i + j]) |z| y ^= GF[z];
...@@ -158,7 +158,7 @@ pub fn encode(comptime mode: Mode, comptime level: Level, comptime version: u16,...@@ -158,7 +158,7 @@ pub fn encode(comptime mode: Mode, comptime level: Level, comptime version: u16,
158 for (message_polynomial, 0..) |x, i| mp[i] = to_alpha(.{@bitReverse(x)})[0];158 for (message_polynomial, 0..) |x, i| mp[i] = to_alpha(.{@bitReverse(x)})[0];
159159
160 for (0..group2_datacodewords_per_block) |i| {160 for (0..group2_datacodewords_per_block) |i| {
161 const lead = mp[i].?;161 const lead = mp[i] orelse 0;
162 for (&generator_polynomial_alpha, 0..) |x, j| {162 for (&generator_polynomial_alpha, 0..) |x, j| {
163 var y = GF[(@as(usize, x) + lead) % 255];163 var y = GF[(@as(usize, x) + lead) % 255];
164 if (mp[i + j]) |z| y ^= GF[z];164 if (mp[i + j]) |z| y ^= GF[z];
...@@ -272,10 +272,6 @@ pub fn encode(comptime mode: Mode, comptime level: Level, comptime version: u16,...@@ -272,10 +272,6 @@ pub fn encode(comptime mode: Mode, comptime level: Level, comptime version: u16,
272 // version block272 // version block
273 if (version >= 7) {273 if (version >= 7) {
274 var bititer: std.bit_set.IntegerBitSet(18) = .{ .mask = versionBits(version) };274 var bititer: std.bit_set.IntegerBitSet(18) = .{ .mask = versionBits(version) };
275 std.debug.assert(bititer.mask == 0b001010010011010011);
276 std.debug.assert(bititer.isSet(0));
277 std.debug.assert(bititer.isSet(1));
278
279 for (0..3) |x| {275 for (0..3) |x| {
280 for (0..6) |y| {276 for (0..6) |y| {
281 grid.setV(size - 11 + x, y, bititer.isSet((y * 3) + x));277 grid.setV(size - 11 + x, y, bititer.isSet((y * 3) + x));
test.zig+94
...@@ -36,3 +36,97 @@ test {...@@ -36,3 +36,97 @@ test {
36 // 30 68 2b d1 03 dd b7 00 ec 1136 // 30 68 2b d1 03 dd b7 00 ec 11
37 _ = &grid;37 _ = &grid;
38}38}
39test {
40 const grid = qrcode.encode(
41 .latin1,
42 .L,
43 25,
44 \\Version 25 QR Code, up to 1853 characters at L level.
45 \\A QR code (abbreviated from Quick Response code) is a type of matrix barcode (or two-dimensional code) that is designed to be read by smartphones. The code consists of black modules arranged in a square pattern on a white background. The information encoded may be text, a URL, or other data.
46 \\Created by Toyota subsidiary Denso Wave in 1994, the QR code is one of the most popular types of two-dimensional barcodes. The QR code was designed to allow its contents to be decoded at high speed.
47 \\The technology has seen frequent use in Japan and South Korea; the United Kingdom is the seventh-largest national consumer of QR codes.
48 \\Although initially used for tracking parts in vehicle manufacturing, QR codes now are used in a much broader context, including both commercial tracking applications and convenience-oriented applications aimed at mobile phone users (termed mobile tagging). QR codes may be used to display text to the user, to add a vCard contact to the user's device, to open a Uniform Resource Identifier (URI), or to compose an e-mail or text message. Users can generate and print their own QR codes for others to scan and use by visiting one of several paid and free QR code generating sites or apps.
49 ,
50 );
51 // 40 4f 55 66 57 27 36 96 f6 e2 03 23 52 05 15 22
52 // 04 36 f6 46 52 c2 07 57 02 07 46 f2 03 13 83 53
53 // 32 06 36 86 17 26 16 37 46 57 27 32 06 17 42 04
54 // c2 06 c6 57 66 56 c2 e0 a4 12 05 15 22 06 36 f6
55 // 46 52 02 86 16 26 27 26 57 66 96 17 46 56 42 06
56 // 67 26 f6 d2 05 17 56 96 36 b2 05 26 57 37 06 f6
57 // e7 36 52 06 36 f6 46 52 92 06 97 32 06 12 07 47
58 // 97 06 52 06 f6 62 06 d6 17 47 26 97 82 06 26 17
59 // 26 36 f6 46 52 02 86 f7 22 07 47 76 f2 d6 46 96
60 // d6 56 e7 36 96 f6 e6 16 c2 06 36 f6 46 52 92 07
61 // 46 86 17 42 06 97 32 06 46 57 36 96 76 e6 56 42
62 // 07 46 f2 06 26 52 07 26 56 16 42 06 27 92 07 36
63 // d6 17 27 47 06 86 f6 e6 57 32 e2 05 46 86 52 06
64 // 36 f6 46 52 06 36 f6 e7 36 97 37 47 32 06 f6 62
65 // 06 26 c6 16 36 b2 06 d6 f6 47 56 c6 57 32 06 17
66 // 27 26 16 e6 76 56 42 06 96 e2 06 12 07 37 17 56
67 // 17 26 52 07 06 17 47 46 57 26 e2 06 f6 e2 06 12
68 // 07 76 86 97 46 52 06 26 16 36 b6 77 26 f7 56 e6
69 // 42 e2 05 46 86 52 06 96 e6 66 f7 26 d6 17 46 96
70 // f6 e2 06 56 e6 36 f6 46 56 42 06 d6 17 92 06 26
71 // 52 07 46 57 87 42 c2 06 12 05 55 24 c2 c2 06 f7
72 // 22 06 f7 46 86 57 22 06 46 17 46 12 e0 a4 37 26
73 // 56 17 46 56 42 06 27 92 05 46 f7 96 f7 46 12 07
74 // 37 56 27 36 96 46 96 17 27 92 04 46 56 e7 36 f2
75 // 05 76 17 66 52 06 96 e2 03 13 93 93 42 c2 07 46
76 // 86 52 05 15 22 06 36 f6 46 52 06 97 32 06 f6 e6
77 // 52 06 f6 62 07 46 86 52 06 d6 f7 37 42 07 06 f7
78 // 07 56 c6 17 22 07 47 97 06 57 32 06 f6 62 07 47
79 // 76 f2 d6 46 96 d6 56 e7 36 96 f6 e6 16 c2 06 26
80 // 17 26 36 f6 46 57 32 e2 05 46 86 52 05 15 22 06
81 // 36 f6 46 52 07 76 17 32 06 46 57 36 96 76 e6 56
82 // 42 07 46 f2 06 16 c6 c6 f7 72 06 97 47 32 06 36
83 // f6 e7 46 56 e7 47 32 07 46 f2 06 26 52 06 46 56
84 // 36 f6 46 56 42 06 17 42 06 86 96 76 82 07 37 06
85 // 56 56 42 e0 a5 46 86 52 07 46 56 36 86 e6 f6 c6
86 // f6 77 92 06 86 17 32 07 36 56 56 e2 06 67 26 57
87 // 17 56 56 e7 42 07 57 36 52 06 96 e2 04 a6 17 06
88 // 16 e2 06 16 e6 42 05 36 f7 57 46 82 04 b6 f7 26
89 // 56 13 b2 07 46 86 52 05 56 e6 97 46 56 42 04 b6
90 // 96 e6 76 46 f6 d2 06 97 32 07 46 86 52 07 36 57
91 // 66 56 e7 46 82 d6 c6 17 26 76 57 37 42 06 e6 17
92 // 46 96 f6 e6 16 c2 06 36 f6 e7 37 56 d6 57 22 06
93 // f6 62 05 15 22 06 36 f6 46 57 32 e0 a4 16 c7 46
94 // 86 f7 56 76 82 06 96 e6 97 46 96 16 c6 c7 92 07
95 // 57 36 56 42 06 66 f7 22 07 47 26 16 36 b6 96 e6
96 // 72 07 06 17 27 47 32 06 96 e2 07 66 56 86 96 36
97 // c6 52 06 d6 16 e7 56 66 16 37 47 57 26 96 e6 72
98 // c2 05 15 22 06 36 f6 46 57 32 06 e6 f7 72 06 17
99 // 26 52 07 57 36 56 42 06 96 e2 06 12 06 d7 56 36
100 // 82 06 27 26 f6 16 46 57 22 06 36 f6 e7 46 57 87
101 // 42 c2 06 96 e6 36 c7 56 46 96 e6 72 06 26 f7 46
102 // 82 06 36 f6 d6 d6 57 26 36 96 16 c2 07 47 26 16
103 // 36 b6 96 e6 72 06 17 07 06 c6 96 36 17 46 96 f6
104 // e7 32 06 16 e6 42 06 36 f6 e7 66 56 e6 96 56 e6
105 // 36 52 d6 f7 26 96 56 e7 46 56 42 06 17 07 06 c6
106 // 96 36 17 46 96 f6 e7 32 06 16 96 d6 56 42 06 17
107 // 42 06 d6 f6 26 96 c6 52 07 06 86 f6 e6 52 07 57
108 // 36 57 27 32 02 87 46 57 26 d6 56 42 06 d6 f6 26
109 // 96 c6 52 07 46 16 76 76 96 e6 72 92 e2 05 15 22
110 // 06 36 f6 46 57 32 06 d6 17 92 06 26 52 07 57 36
111 // 56 42 07 46 f2 06 46 97 37 06 c6 17 92 07 46 57
112 // 87 42 07 46 f2 07 46 86 52 07 57 36 57 22 c2 07
113 // 46 f2 06 16 46 42 06 12 07 64 36 17 26 42 06 36
114 // f6 e7 46 16 37 42 07 46 f2 07 46 86 52 07 57 36
115 // 57 22 77 32 06 46 57 66 96 36 52 c2 07 46 f2 06
116 // f7 06 56 e2 06 12 05 56 e6 96 66 f7 26 d2 05 26
117 // 57 36 f7 57 26 36 52 04 96 46 56 e7 46 96 66 96
118 // 57 22 02 85 55 24 92 92 c2 06 f7 22 07 46 f2 06
119 // 36 f6 d7 06 f7 36 52 06 16 e2 06 52 d6 d6 16 96
120 // c2 06 f7 22 07 46 57 87 42 06 d6 57 37 36 16 76
121 // 52 e2 05 57 36 57 27 32 06 36 16 e2 06 76 56 e6
122 // 57 26 17 46 52 06 16 e6 42 07 07 26 96 e7 42 07
123 // 46 86 56 97 22 06 f7 76 e2 05 15 22 06 36 f6 46
124 // 57 32 06 66 f7 22 06 f7 46 86 57 27 32 07 46 f2
125 // 07 36 36 16 e2 06 16 e6 42 07 57 36 52 06 27 92
126 // 07 66 97 36 97 46 96 e6 72 06 f6 e6 52 06 f6 62
127 // 07 36 57 66 57 26 16 c2 07 06 16 96 42 06 16 e6
128 // 42 06 67 26 56 52 05 15 22 06 36 f6 46 52 06 76
129 // 56 e6 57 26 17 46 96 e6 72 07 36 97 46 57 32 06
130 // f7 22 06 17 07 07 32 e0 ec 11 ec 11
131 _ = &grid;
132}