CRC:Cyclic Redundancy Check 循环冗余校验 CRC 校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源 少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段。 CRC 校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数 作为CRC 校验码。其实现步骤如下: (1) 设待发送的数据块是m 位的二进制多项式t(x),生成多项式为r 阶的g(x)。在数据块 的末尾添加r 个0,数据块的长度增加到m+r 位,对应的二进制多项式为xr t(x) 。 (2) 用生成多项式g(x)去除xr t(x) ,求得余数为阶数为r-1 的二进制多项式y(x)。此二进 制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC 校验码。 (3) 用xr t(x) 以模2 的方式减去y(x),得到二进制多项式xr t'(x) 。xr t'(x) 就是包含了CRC 校验码的待发送字符串。 从CRC 的编码规则可以看出,CRC 编码实际上是将代发送的m 位二进制多项式t(x)转换成 了可以被g(x)除尽的m+r 位二进制多项式xr t'(x) ,所以解码时可以用接受到的数据去除g(x), 如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多 CRC 的硬件解码电路就是按这种方式进行检错的。同时xr t'(x) 可以看做是由t(x)和CRC 校验码 的组合,所以解码时将接收到的二进制数据去掉尾部的r 位数据,得到的就是原始数据。 为了更清楚的了解CRC 校验码的编码过程,下面用一个简单的例子来说明CRC 校验码的编码 过程。由于CRC-32、CRC-16、CCITT 和CRC-4 的编码过程基本一致,只有位数和生成多项式不 一样。为了叙述简单,用一个CRC-4 编码的例子来说明CRC 的编码过程。 设待发送的数据t(x)为12 位的二进制数据100100011100;CRC-4 的生成多项式为g(x) = x4 + x +1,阶数r 为4,即10011。首先在t(x)的末尾添加4 个0 构成x4t(x) ,数据块就成了 1001000111000000。然后用g(x)去除x4t(x) ,不用管商是多少,只需要求得余数y(x),将y(x)加到数据块末尾的后四位,就生成了编码后的数据块