海明码(Hamming Code )编码的关键是使用多余的奇偶校验位来识别一位错误。
码字 (Code Word)  按如下方法构建:
1 、把所有 2 的幂次方的数据位标记为奇偶校验位 ( 编号为 1, 2, 4, 8, 16, 32, 64 等的位置 )
2 、其他数据位用于待编码数据 . ( 编号为 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17 等的位置 )
3 、每个奇偶校验位的值代表了代码字中部分数据位的奇偶性,其所在位置决定了要校验和跳过的比特位顺序。
位置 1 :校验 1 位,跳过 1 位,校验 1 位,跳过 1 (1,3,5,7,9,11,13,15,…)
位置 2 :校验 2 位,跳过 2 位,校验 2 位,跳过 2  (2,3,6,7,10,11,14,15,…)
位置 4 :校验 4 位,跳过 4 位,校验 4 位,跳过 4  (4,5,6,7,12,13,14,15,20,21,22,23,…)
位置 8 :校验 8 位,跳过 8 位,校验 8 位,跳过 8 (8-15,24-31,40-47,…)
如果全部校验的位置中有奇数个 1 ,把该奇偶校验位置为 1 ;如果全部校验的位置中有偶数个 1 ,把该奇偶校验位置为 0.
举例说明:
一个字节的数据: 10011010
构造数据字 (Data Word), 对应的校验位留空 _ _ 1 _ 0 0 1 _ 1 0 1 0
计算每个校验位的奇偶性  ( ? 代表要设置的比特位 ):
位置 1 检查 1,3,5,7,9,11:
? _ 1 _ 0 0 1 _ 1 0 1 0.  偶数个 1 ,因此位置 1 设为 0 ,即 : 0 _ 1 _ 0 0 1 _ 1 0 1 0
位置 2 检查 2,3,6,7,10,11:
0 ? 1 _ 0 0 1 _ 1 0 1 0.  奇数个 1 ,因此位置 2 设为 1 ,即 : 0 1 1 _ 0 0 1 _ 1 0 1 0
位置 4 检查 4,5,6,7,12:
0 1 1 ? 0 0 1 _ 1 0 1 0 奇数个 1 ,因此位置 4 设为 1 ,即 : 0 1 1 1 0 0 1 _ 1 0 1 0
位置 8 检查 8,9,10,11,12:
0 1 1 1 0 0 1 ? 1 0 1 0 偶数个 1 ,因此位置 8 设为 0 ,即 : 0 1 1 1 0 0 1 0 1 0 1 0
因此码字为 : 011100101010.
查找并纠错一位错误
上例中构建了一个码字  011100101010 ,假定实际接收到的数据是 011100101110.  则接收方可以计算出哪一位出错并对其进行更正。方法就是验证每一个校验位。记下所有出错的校验位,可以发现校验位 2 8 的数据不正确 错误校验位  2 + 8 = 10,  则位置 10 的数据出错。一般说来,对所有校验位进行检查 将所有出错的校验位置相加 得到的就是错误信息所在的位置 .