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;当部分余数的位数小于除数位数时,该余数即为最后余数。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f96d6ff7-3b66-4719-9334-4ae1268c4354/image18.png

CRC码基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式;

CRC码的关键是如何从K位信息位简便地得到r位校验位(编码),及如何从K+R位信息码判断是否出错。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/932c3d3f-ce5d-4a63-8298-46247dde84ec/image19.png

CRC码的编码方法:

因此所得CRC码可被G(x)表示的数码除尽。

如果CRC码在传输过程中不出错,其余数必为0;

如果传输过程中出错,则余数不为0,由余数指出哪一位出错,即可纠正

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3c3116f8-8357-4d30-9fc5-d09f68d5557f/image20.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b80ca019-0f04-48d0-b68c-486bb5f0a983/image21.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/078ed272-9615-4b69-9795-4c9b4aa1d379/image22.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2bd40a9b-7a96-463d-80ad-c4222e346263/image23.png

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/33a7f19c-69f9-45ca-91e8-c854df62d8f2/image24.png