CRC循环冗余校验计算过程

发布时间 2023-07-13 20:08:29作者: 小脚挪一挪

储备知识:

  • 同或运算(同0异1)
  • 异或运算(同1异0)

CRC校验中,多项式可表示为\((\sum_{i=1}^{j}C_iX^i)+1,C=0,1\)

注:使用多项式算术是为了在进行二进制计算时无需考虑进位问题

CRC中用到的除数,由多项式的各项系数组成

运算举例

设多项式为X6+X4+X2+X+1,进行校验的数据设为1101011011

可得除数为1 0 1 0 1 1 1

在原数据末端加上多项式阶数个0,得:1101011011000000

与除数进行异或运算:

\[\frac{1101011011000000}{1010111******}(*无意义占位符) \]

得结果:

\[011100[011000000](括号内为未参与异或运算的位,加在运算结果后) \]

再进行异或运算:

\[\frac{0111100011000000}{*1010111******}(*无意义占位符) \]

注:进行异或运算时数据第一个1与除数左对齐

再进行异或运算直至所有位都进行过异或运算为止

得到的结果即为CRC校验和(长度 = 除数减1 = 之前加0的个数)

将校验和加在原数据之后,就是带有CRC校验和的数据

注:当最后异或运算结果的有效位数较少时,加在原数据后的校验和的长度也应 = 除数减1 = 之前加0的个数,长度不够在校验和前面加0