跳到主内容
UniKit

校验和计算器

一次算出文本或十六进制字节串的 CRC-32、CRC-32C、CRC-16/CCITT-FALSE、CRC-16/MODBUS、CRC-8/ATM、Adler-32、XOR-8(BCC) 与 Fletcher-16,同时给出 hex 与十进制表示。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

字节数: 0

校验值
算法Hex十进制

CRC-32 使用反射多项式 0xEDB88320、初值 0xFFFFFFFF、结果异或 0xFFFFFFFF;Adler-32 依 RFC 1950

这个工具能做什么

  • 对着规范文档核对数据链路:同一个 "123456789" 在 CRC-32、CRC-32C、CRC-16/CCITT-FALSE 下到底应该是哪个值,一次全部列出来。
  • 调 Modbus / 串口协议时确认 CRC-16/MODBUS 的字节序与结果,不用为了一个小工具去装驱动或写脚本。
  • 排查文件损坏:拿压缩包或固件里记录的 Adler-32、CRC-32 和自己算出来的值对比,定位是哪一段字节变了。
  • 手里只有十六进制报文(比如 01 03 00 00 00 0A)时,勾选「输入是十六进制字节串」直接对字节算校验值。

示例

输入

123456789

输出

CRC-32 0xCBF43926;CRC-32C 0xE3069283;CRC-16/CCITT-FALSE 0x29B1;CRC-16/MODBUS 0x4B37;CRC-8/ATM 0xF4;Adler-32 0x091E01DE;XOR-8(BCC) 0x31;Fletcher-16 0x1EDE

"123456789" 是各算法公开的标准测试向量(check value),这里的结果正好是规范里写的值,可以用来自检工具本身是否用对了多项式与初值。

常见问题

为什么我的 CRC-32 和工具算的不一样?

最常见的原因是输入不完全相同:这里默认把文本按 UTF-8 编码成字节,中文一个字符占 3 个字节,末尾换行也会参与计算。如果你要算的是二进制报文,请勾选十六进制输入,把字节原样粘进来。

CRC-16/CCITT-FALSE 和 CRC-16/MODBUS 差在哪?

两个都是 CRC-16,但参数不同:CCITT-FALSE 用多项式 0x1021、初值 0xFFFF、不反射输入输出;MODBUS 用反射多项式 0xA001、初值 0xFFFF、反射输入输出。所以同一串数据得到的结果完全不同,选错就会出现「对不上」的现象。

Adler-32、XOR-8(BCC)、Fletcher-16 是拿来干什么的?

它们都是比 CRC 更轻量的校验:Adler-32 是 zlib 用的(速度快、对大文件更友好),XOR-8 常见于电力 / 串口协议的帧尾校验,Fletcher-16 则介于两者之间。它们的检错能力弱于 CRC,但对短报文足够用。

十六进制输入为什么报「不是合法的十六进制字符串」?

十六进制字符的个数必须是偶数,因为它要按两个字符拼成一个字节。空格、冒号和连字符会被自动去掉,所以 "0x01 03" 或 "01-03" 都能解析;只写了 "1 3" 这种奇数长度就会报错。

计算过程会联网吗?

不会。8 种校验算法都是本地的查表 / 累加实现,输入内容不会离开浏览器,也适合处理不想外传的报文或文件片段。

关键词:crc32crc32ccrc16crc8adler32fletcherbcc校验和校验码checksummodbusccitt

同类工具