无需登录 数据私有 本地保存

CRC 校验和计算器 - 循环冗余校验在线

17
0
0
0
0 字节
广泛应用于Modbus RTU/ASCII工业通信协议,以及串行通信中的数据完整性校验。
CRC-16/MODBUS 16位
--
格式:
校验值宽度:16 位(2 字节) 输入长度:13 字节
什么是CRC校验?
CRC(Cyclic Redundancy Check,循环冗余校验)是一种根据数据产生简短固定位数校验码的散列函数,主要用来检测或校验数据传输/保存后可能出现的错误。它利用多项式除法原理,在数据末尾附加校验码,接收方通过重新计算来验证数据完整性。CRC能检测出所有单比特错误、双比特错误、奇数个错误以及突发长度小于校验位宽度的错误。
CRC与MD5、SHA有什么区别?
CRC是错误检测码,设计目标是快速检测数据传输中的随机错误,计算速度极快但不具备安全性,容易被人为伪造。MD5、SHA是密码学哈希函数,设计目标是抗碰撞和防篡改,计算较慢但安全性高。简单来说:CRC用于检测意外错误(如网络噪声),哈希用于防范恶意篡改。
为什么有这么多CRC变体?
不同的CRC算法变体(如CRC-8、CRC-16、CRC-32)主要区别在于:多项式(影响检错能力)、初始值(影响对前导零的敏感度)、输入/输出反射(影响位序处理方式)、异或输出值(影响最终结果)。不同应用场景选择了不同的参数组合以优化特定类型的错误检测。例如CRC-32被以太网和ZIP广泛采用,CRC-16/MODBUS则针对工业通信优化。
RefIn和RefOut(反射)是什么意思?
反射(Reflection)指的是位序反转。RefIn=True表示每个输入字节的位在计算前被反转(bit0变成bit7,bit1变成bit6...)。RefOut=True表示最终CRC值的所有位被反转。这种设计源于早期串行通信中数据先发送最低有效位(LSB first)的习惯。许多常见算法如CRC-32和CRC-16/MODBUS都启用了反射。
如何验证CRC计算结果是否正确?
可以使用在线校验值对比已知测试向量验证。例如:字符串"123456789"的CRC-32值应为0xCBF43926,CRC-16/MODBUS值应为0x4B37。这些标准测试向量被广泛用于验证CRC实现的正确性。本工具已使用这些测试向量进行了校准。
CRC能100%检测出所有错误吗?
不能。CRC理论上存在碰撞可能(不同数据产生相同校验值)。但精心选择的多项式可以保证:检测所有单比特错误、所有双比特错误(数据长度在一定范围内)、所有奇数个比特错误、所有突发长度≤校验位宽度的错误。对于n位CRC,未检测到的错误概率约为2-n,实际中已足够可靠。