软考-CRC循环校验码

软考-CRC循环校验码

  一、什么是 CRC?

  CRC(Cyclic Redundancy Check,循环冗余校验)是一种常用的数据校验技术,主要用于检测数据在传输或存储过程中是否发生错误。

  它的基本思想是:发送方根据原始数据计算出一个 CRC 校验值,并将校验值附加到数据后面;接收方收到数据后,使用相同的规则重新计算并进行校验,从而判断数据是否发生了变化。

  CRC 的计算并不是普通的数学除法,而是采用模 2 除法,其核心运算就是异或(XOR)。

  简单来说,整个过程可以理解为:

 1 原始数据
 2    ↓
 3 根据生成多项式计算 CRC
 4    ↓
 5 得到 CRC 校验码
 6    ↓
 7 数据 + CRC
 8    ↓
 9 传输
10    ↓
11 接收方重新计算
12    ↓
13 判断数据是否出错

   二、CRC循环校验码的具体实现

  使用CRC编码,需要先约定一个生成多项式G(x)。生成多项式的最高位最低位必须是1。假设原始信息有m位,则对应多项式M)。生成校验码思想就是在原始信息位后追加若干校验位,使得追加的信息能G整除。接收方接收到带校验位的信息,然后用G(x)整除。余数为0,则没有错误;反之则发生错误。

  例:假设原始信息串为10110,CRC的生成多项式为 G(x)=x^4+x+1,求CRC校验码。

  (1)在原始信息位后面添0,假设生成多项式的阶为 r ,则在原始信息位后添加个0,本题中,G(x)阶为4,则在原始信息串后加 4个0,得到的新串为101100000,作为被除数。

  (2) 由多项式得到除数,多项中x的幂指数存在的位置1,不存在的位置0。本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在,因此得到串10011。

  (3) 生成CRC校验码,将前两步得出的被除数和除数进行稹2除法运算(即不进位也不借位的除法运算)。除法过程如下图所示:

 1             100
 2         ─────────────
 3 10011 ) 101100000
 4         10011
 5         -----
 6           10100
 7           10011
 8           -----
 9             11100
10             10011
11             -----
12              1111
13   

  得到余数1111。

  注意:这里不关注商是多少,只需要关注余数。余数不足 r 的情况下,则余数左边用若干个 0 补齐。如求得余数为11,r=4,则补两个0得到0011。

  (4) 生成最终发送信息串,将余数添加到原始信息后。上例中,原始信息为10110,添加余数1111后,结果为101101111。发送方将此数据发送给接收方。

  (5) 接收方进行校验。接收方的校过程与生成过程类似,接收方接收了带校验和的帧后,用多项式G(x)来除。余数为0,则表示信息无错;否则要求发送方进行重传。

  注意:收发信息双方需使用相同的生成多项式。

  三、总结

  CRC 的实现过程可以简单描述为:CRC 就是通过模 2 除法计算数据的余数,并利用这个余数来检测数据传输过程中是否发生错误。

  CRC 的主要作用是检错,而不是纠错。也就是说,它可以帮助我们发现数据在传输过程中是否可能发生错误,但不能直接把错误的数据恢复回来。

  CRC 广泛应用于计算机网络、数据通信、存储设备以及各种通信协议中。常见的 CRC 类型包括 CRC-8、CRC-16、CRC-32 等。

posted @ 2026-09-30 16:05  欢乐豆123  阅读(3)  评论(0)    收藏  举报