CRC16 在线计算器
支持 Modbus RTU、CCITT、XMODEM、KERMIT、X-25 等 9 种算法模型。粘贴报文即出校验码,自动拼接完整帧,也能反向校验你手上那串报文对不对。
纯本地运算 · 不上传数据
断网可用
9 种参数模型
自动校验
完整报文(已追加 CRC)
01 03 00 00 00 0A C5 CD
i
报文不足 3 字节,仅计算 CRC。
CRC16 参数模型对照表
CRC16 不是一种算法,而是一族算法。参数差一个,结果就完全不同——这也是现场"两个工具算出两个值"的根本原因。下表可在计算器里逐一验证。
| 模型名称 | Poly | Init | RefIn | RefOut | XorOut | Check("123456789") | 常见用途 |
|---|---|---|---|---|---|---|---|
| CRC-16/MODBUS | 0x8005 | 0xFFFF | true | true | 0x0000 | 0x4B37 | Modbus RTU 串口通讯 |
| CRC-16/ARC | 0x8005 | 0x0000 | true | true | 0x0000 | 0xBB3D | DL/T 645 等电力规约、部分仪表 |
| CRC-16/MAXIM-DOW | 0x8005 | 0x0000 | true | true | 0xFFFF | 0x44C2 | 1-Wire 总线、DS18B20 传感器 |
| CRC-16/USB | 0x8005 | 0xFFFF | true | true | 0xFFFF | 0xB4C8 | USB 数据包校验 |
| CRC-16/CCITT-FALSE | 0x1021 | 0xFFFF | false | false | 0x0000 | 0x29B1 | 部分工业协议、GPS、传感器模块 |
| CRC-16/XMODEM | 0x1021 | 0x0000 | false | false | 0x0000 | 0x31C3 | XMODEM 文件传输、部分固件升级 |
| CRC-16/KERMIT | 0x1021 | 0x0000 | true | true | 0x0000 | 0x2189 | 蓝牙、部分电表与无线模块 |
| CRC-16/X-25 | 0x1021 | 0xFFFF | true | true | 0xFFFF | 0x906E | X.25、部分进口仪表 |
| CRC-16/DNP | 0x3D65 | 0x0000 | true | true | 0xFFFF | 0xEA82 | 电力 DNP3 规约 |
怎么用这张表:把
123456789(注意是这串字符的 ASCII 码,不是十六进制数)输进上面的计算器,切换模型,算出来等于表格 Check 列的值,说明该模型的实现是对的。反过来说,如果你手上有一串报文和它的正确 CRC,可以用计算器逐个模型试,哪个能对上就是哪个模型。
现场调试常见问题
1. 为什么我算出的 CRC 和别人给的不一样?
九成情况是模型选错了。都叫 CRC16,但初始值是 0x0000 还是 0xFFFF、多项式是 0x8005 还是 0x1021、输入输出要不要反射,任意一项不同结果就完全不一样。先确认对方协议文档里写的是哪个模型,没有文档就用上面的方法反推。
2. CRC 值算对了,从站还是报错?
八成是字节顺序写反了。Modbus 规定 CRC 低字节在前:计算值 0xCDC5,报文里要写 C5 CD。写成 CD C5,从站会直接丢弃整帧,表现为"没响应"或超时,而不是返回异常码——这点很容易误导排查方向。
3. 报文里到底要不要包含 CRC 本身?
不要。CRC 是对校验范围内所有字节算出来的,CRC 字段本身不参与计算。本工具默认对全部输入字节计算,若你粘贴的是带 CRC 的完整报文,会自动识别末尾两字节并做校验。
4. 我的报文有中文或者特殊字符怎么办?
切换成"ASCII 文本"模式即可按字符编码逐字节计算。注意中文是多字节编码(UTF-8 下 3 字节),本工具只支持单字节字符,含中文请先转成十六进制再算。
5. 这个工具会上传我的数据吗?
不会。全部逻辑在浏览器本地执行,页面不发任何网络请求,断网也能用。涉及产线数据、设备地址的报文可以放心粘贴。
需要定制数据采集 / 上位机软件?
QQ 412224615
串口 · Modbus RTU/TCP · PLC 数据上云 · 采集看板 · 老设备改造