CRC-16 calculator with seven variants
A 16-bit CRC is the classic error check for serial links, industrial fieldbuses and small file-transfer protocols. The difficulty is that “CRC-16” is not one algorithm: dozens of variants differ in polynomial, initial value, bit reflection and final XOR. This CRC-16 calculator supports the seven variants you are most likely to meet and shows the result as 4 hex digits.
Variants and their check values
Each variant is identified by its “check” value — the CRC of the ASCII string 123456789. Type that string into the tool to confirm you have chosen the right one:
| Variant | Check value | Typical use |
|---|---|---|
| CRC-16/ARC (IBM) | bb3d | ARC archives, LHA, many legacy protocols |
| CRC-16/MODBUS | 4b37 | Modbus RTU industrial devices |
| CRC-16/CCITT-FALSE | 29b1 | Many embedded and telecom uses (also called CRC-16/IBM-3740) |
| CRC-16/XMODEM | 31c3 | XMODEM/YMODEM file transfer, some Bluetooth uses |
| CRC-16/KERMIT | 2189 | Kermit protocol (true CCITT, reflected) |
| CRC-16/X-25 | 906e | HDLC, X.25, PPP |
| CRC-16/USB | b4c8 | USB data packets |
What the parameters mean
- Polynomial:
0x8005(ARC, MODBUS, USB) or0x1021(the CCITT family: CCITT-FALSE, XMODEM, KERMIT, X-25). - Initial value:
0x0000or0xFFFF. Starting at 0xFFFF makes leading zero bytes detectable. - Reflection: whether bits are processed least-significant first, as UARTs transmit them.
- Final XOR:
0xFFFFfor X-25 and USB, otherwise none.
Byte order on the wire
The tool shows the CRC as a 16-bit number. Protocols decide how to send it: Modbus RTU, for example, transmits the low byte first, so a CRC of 4b37 goes on the wire as 37 4B. If your device rejects frames, swapping the two bytes is the first thing to try.
Limits
A 16-bit CRC detects all single-bit errors and all burst errors up to 16 bits, but with only 65,536 possible values it is suitable for short frames, not large files. For files use CRC-32 or a cryptographic hash. Like every CRC, it gives no protection against deliberate modification — use HMAC or a signature for that.
Text is processed as UTF-8 bytes, and uploaded files byte for byte. For binary frames written in hex, convert them to a file or use a tool that accepts raw bytes. The calculation runs in your browser.
Common reasons a CRC-16 does not match
- Hex typed as text. Typing
010300000001computes the CRC of twelve ASCII characters, not of the six bytes01 03 00 00 00 01. Save the frame as a binary file and choose the File source instead. - An extra line ending. Many editors add a newline when saving a file, and that byte changes the result. Check the file size matches the frame length.
- Swapped bytes.
4b37and374bare the same CRC written in different byte orders; compare against the order your protocol documents. - A variant that is not listed. Some devices use less common settings, such as an initial value of
0x1D0F. If none of the seven variants produces the expected check value for123456789, your device uses a different parameter set.
The Compare with an expected hash box helps here: paste the value your device reports, and the tool shows whether it matches the selected variant or another algorithm.