伽罗瓦域
伽罗瓦域(有限域,Galois Field)是元素个数有限、而四则运算(加减乘除)仍能无矛盾成立的代数结构,得名于 19 世纪法国数学家埃瓦里斯特·伽罗瓦。它在元素个数为素数的幂 p^n 时存在,记作 GF(p^n)。
二维码纠错所用的里德-所罗门码运行在 GF(2^8) = GF(256) 上。GF(256) 有从 0 到 255 共 256 个元素,正好与 1 个字节所能表示的取值范围一致。二维码的数据本身就是按字节为单位处理的,因此与 GF(256) 的契合度堪称完美,无需任何额外的换算。
在普通的整数运算里,比如 200 + 100 = 300,结果会超出 1 个字节的范围。而 GF(256) 的加法被定义为 XOR(异或),结果始终落在 0 到 255 之间。乘法则定义为以本原多项式为模的多项式运算,同样不会溢出。正是这种「运算封闭」的性质,为固定长度的数据块提供了纠错的数学保证:无论怎么运算,都不会有数据跑出可表示的范围之外。
实现层面,每次都用多项式运算去算 GF(256) 的乘法太慢,于是一般会预先算好对数表与反对数表(各 256 项),把乘法转换成「对数相加、再查反对数」。二维码的编码器与解码器内部都内置着这两张 256 字节的表,这也是为什么纠错运算能在极为廉价的读取硬件上实时完成。