CRC(cyclic redundancy check)码可以发现并纠正信息存储或传送过程中连续出现的多位错误,在磁介质存储和计算机之间通信方面得到广泛应用;
在数据存储和数据通讯领域,CRC无处不在: 著名通讯协议X.25的FCS(帧检错序列)采用CRC. CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。欧洲交换机都使用CRC4。
CRC码是基于模2运算而建立编码规律的校验码;
模2运算特点:运算不考虑进位和借位,规则如下:
①模2加和模2减规则相同,按位异或,相同得0,不同得1。即:0±0=0,0±1=1,1±0=1,1±1=0。
②模2乘时按模2加求部分积之和。
③模2除是按模2减求部分余数。每求一位商应使部分余数减少一位。上商规则是:当部分余数的首位为1时,商取1,当部分余数的首位为0时,商取0;当部分余数的位数小于除数位数时,该余数即为最后余数。
CRC码基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式;
CRC码的关键是如何从K位信息位简便地得到r位校验位(编码),及如何从K+R位信息码判断是否出错。
CRC码的编码方法:
因此所得CRC码可被G(x)表示的数码除尽。
如果CRC码在传输过程中不出错,其余数必为0;
如果传输过程中出错,则余数不为0,由余数指出哪一位出错,即可纠正