CRC(循环冗余校验)是一种数据通讯中常见的差错校验技术。其主要特征是信息字段的长度和校验字段可任意选定。
生成CRC校验码的基本原理:
任意一个由二进制组成的代码都可以和一个系数仅为0或1的多项式一一对应。
例:二进制11011,对应多项式G(x)=X^4+x^3+x+1。
多项式又分为生成多项式G(x)和信息多项式(需要发送的报文)C(x)。一般生成多项式为发送方和接收方两者共同约定。 生成步骤:
1、将生成多项式转化为对应的二进制数,并左移R位(R为生成表达式最高项次数),生成一个R+1位的二进制序列。 2、将要发送的信息码左移R位,即在低位补R个0。
3、用左移后的信息码对生成表达式(二进制)进行模2运算,得到一个R位的余数。
4、将R位的余数拼接在信息码左移后的低位,得到完整的CRC码。
例题:
假设使用生成多项式是G(X)=X3+X+1。4位的原始报文为1010,求编码后的报文。
解:
(1)生成G(x)转化为二进制为1011,R为3;
(2)原始报文左移R位为1010000;
(3)用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或;
具体过程如图:
(4)将余数011加至1010左移后的低位,所得最终CRC编码为1010011,然后将CRC码发送至接收方。
接收方校验:
接收方接收到CRC码之后,将接收到的CRC码与之前约定好的生成多项式表示的二进制进行模2除法,若得到的余数为0,则信息传输正确;若除的的结果不为0,则传输出现错误。