https://zkfold.ing/qrcode
原文:https://qr.blinry.org/
译者:Kurt Pan
这是你选择的二维码:

这个码的大小为29x29 modules (模块) (二维码中对像素的称呼)。二维码有不同的大小,称为 *versions (版本)*。最小的版本是21×21 模块,之后的每个版本,大小都会增加4。所以我们二维码的版本为3!以下是不同的部分:
它们在最一开始帮助扫描器识别二维码。

查找器图案周围有空行,阅读内容时跳过它们很重要。

帮助扫描器正确读取二维码的另外一个图案。

两行始终交替出现的黑/白模块——帮助扫描器正确读取二维码的另一种方法。

这决定了掩码图案和纠错级别。有一个垂直版本:

还有一个水平版本。注意,时序图案会中断这两条线!

未突出显示的均为实际内容!

还有一个此处未显示的区域:静区,即二维码周围的白色边框。可以帮助扫描器识别二维码的开始和结束位置。
为了避免出现大块黑色或白色模块,二维码使用掩码。有八种不同的选项。这是指定掩码图案的地方:

黑色模块是 1,白色是 0。在这种情况下,掩码图案由二进制数 110 组成。对应于十进制数 6。
每种类型都有一个预定义的图案。你可以用以下故事更好地记住这些图案。
瞧,你犯法了。很抱歉,但你的未来我只看到黑暗,你将入狱(going behand bars):

但随后,事情开始出现,随着黑色像素从左向右移动,故事也徐徐展开。

那么,会发生什么呢?首先,你得到了陈词滥调的条纹监狱服。

但你还没有失去希望,彩虹可以帮助你保持斗志。

在你入狱一半时间时(对称码 和 ),你开始有了爱好:
当你一个人的时候,你会画画,例如M.C.埃舍尔的蜥蜴。

或者你用两只眼睛观看其他囚犯下棋。

但时间一拖再拖,你开始制定越狱计划:你将用斧头砍出一条路。

最后你成功逃脱了!这是你监狱时间的终点,所以你会得到一面方格旗。

而现在,一切都明亮幸福,就像一张鲜花壁纸!

我们的例子中,图案 是看起来像像黑白彩虹的一部分的那个!如果你在二维码的数据部分上重复此图案,你会得到以下结果:

对掩码中的每个黑色模块,翻转二维码中的模块!接下来的步骤将向你展示如何操作。我们准备了一本 DIY 手册,其中包含适用于所有掩码类型的预制备忘单!

你可以把它折成一本小册子,就像这样!

让我们开始解码内容吧!首先,我们需要知道内容的编码。该信息始终显示在右下角。

但要记住!首先你得应用掩码!看看我们的备忘单,看如何操作。

我们把两个框异或在一起:

同样,每个图案都对应一种不同的编码模式:数字模式 字母数字模式 字节模式ECI(扩展信道解释)模式汉字模式
对于我们的二维码,编码模式是字节模式(4),可以继续啦!
内容从右下角开始。你向上走,在两列之间曲折前进,然后在左边两列曲折向下。你总是跳过所有特殊区域!

前四比特是编码模式。对于 ASCII 编码模式,接下来的八比特指定内容长度。之后,每八比特就是一个内容字节。

XOR

=

这是(未掩码的)长度信息:

二进制: 00011100十进制:28该值是内容的总长度(以字节为单位)!
终于,我们可以继续解码二维码的内容了!这是第一个(未掩码的)字节:

二进制:01101000十六进制:0x68这是对应的 ASCII 字符: h
这是第二个(未掩码的)字节:

二进制:01110100十六进制:0x74这是对应的 ASCII 字符: t
……如此继续!剩下的字节供你自己练习。当你读完之前长度字段指示的字符数后就可以停止。
你可以使用此表将十六进制数字转换为 ASCII 字符!如果你想,也可以尝试记住此表的部分内容:小写字母以 0x61 处的“a”开头,以 0x7A 处的“z”结尾。中间的你可以数一下。

那么剩下的都是内容了吗?不全是!还有纠错功能,用于确保即使某些部分损坏、模糊或丢失,二维码仍然可以读取。纠错功能是由一些奇特的数学生成的,我们不在这个手撕教程中关注这些。
这应该是你手撕简单二维码所需的一切。祝贺你!