CRC(Cyclic Redundancy Check,循环冗余校验)用于检测数据在传输或存储过程中是否出现差错。

核心原理

  1. 生成校验码
    • 发送方:将需要传输的数据(看作一个二进制多项式)与一个预先确定的生成多项式(如常见的 CRC - 16、CRC - 32 等,不同标准生成多项式不同)进行运算,得到一个固定长度的CRC 校验码
    • 例如,数据是 1011001,生成多项式是 1010,通过模 2 除法(异或运算)得到余数,这个余数就是校验码。
  2. 验证数据完整性
    • 接收方:接收到数据(包括附带的 CRC 校验码)后,用同样的生成多项式对数据部分进行运算,得到新的校验码。
    • 将新校验码与接收到的校验码对比:若一致,认为数据无错误;若不一致,说明数据在传输过程中发生了错误。

特点

  • 检错能力强:能检测出大部分的随机错误(如位翻转)、突发错误(连续多位错误),但不能纠错(只能发现错误,无法定位或修正错误)。
  • 计算高效:通过移位寄存器等硬件或简单的算法就能快速计算,适合对实时性要求高的场景。
  • 应用广泛:在以太网、zip 压缩、磁盘存储、蓝牙等众多领域都有应用,比如 CRC - 32 常用于验证文件传输的完整性。

简单示例(帮助理解)

假设数据是 1010,生成多项式是 1101(4 位,校验码长度为 4−1=3 位):

  1. 发送方计算:
    • 数据后面补 3 个 0,变成 1010000
    • 10100001101 做模 2 除法,得到余数(校验码)011
    • 发送的数据为 1010 + 011 = 1010011
  2. 接收方验证:
    • 对接收到的 10100111101 做模 2 除法,若余数为 0,说明数据正确;若余数非 0,说明数据错误。

总之,CRC 是一种高效的差错检测手段,通过多项式运算生成和验证校验码,保障数据传输或存储的可靠性。