CRC-16 Calculator (Modbus, CCITT, XMODEM)

CRC-16 is a 16-bit checksum used in serial protocols, storage, and embedded systems — but there are many incompatible variants. Enter text or raw hex bytes and this tool computes the checksum for ARC, Modbus, CCITT-FALSE, XMODEM, and Kermit at once, in hex and decimal. It all runs locally.

How to use the CRC-16 Calculator (Modbus, CCITT, XMODEM)

Type or paste your data and switch Input as between Text and Hex bytes. In text mode the input is encoded as UTF-8 before the checksum is computed; in hex mode the tool reads pairs of hex digits (spaces, commas, and 0x prefixes are ignored), so 48 65 6C 6C 6F and 48656c6c6f are equivalent. The table updates live and shows each variant's result in both hexadecimal and decimal.

Five common variants are computed side by side: CRC-16/ARC (also called IBM or just "CRC-16"), CRC-16/MODBUS used by the Modbus RTU protocol, CRC-16/CCITT-FALSE, CRC-16/XMODEM from the file-transfer protocol, and CRC-16/KERMIT. Each differs in its polynomial, initial value, and whether the bits are reflected, which is why the same input produces five different numbers. Use the one your protocol or device specifies. As a sanity check, every variant's value for the standard test string 123456789 matches the published "check" constant for that variant.

Everything runs in your browser with no network calls, so your data stays local and the result is instant.

CRC-16: one name, many variants

A cyclic redundancy check, or CRC, is a checksum built from polynomial division over binary data. Conceptually the message is treated as the coefficients of a large polynomial, divided by a fixed generator polynomial, and the remainder becomes the checksum. CRCs are excellent at catching the kinds of errors that happen on real communication links and storage media — single-bit flips, short bursts of corruption, and many common patterns — which is why they appear everywhere from Ethernet frames and ZIP files to USB packets and industrial sensors. A CRC-16 produces a 16-bit result, a good balance of error detection and compactness for short messages.

The catch that surprises newcomers is that "CRC-16" does not name a single algorithm. A concrete CRC is defined by several parameters: the polynomial (the divisor, such as 0x8005 or 0x1021), the initial value loaded into the register, whether the input bytes and the output are reflected (bit-reversed, a legacy of hardware that shifted least-significant-bit first), and a final XOR applied to the result. Different combinations were standardized by different committees and vendors, producing a zoo of variants — ARC, Modbus, CCITT, XMODEM, Kermit, Genibus, and more — that share the "CRC-16" label but compute entirely different numbers for the same data. Feeding a Modbus device a CCITT checksum simply fails.

To keep them straight, the Rocksoft model and catalogues like Greg Cook's CRC reference list every variant by its parameters plus a check value: the CRC of the ASCII string "123456789". That single constant is the fastest way to confirm an implementation matches the variant you intend — if your code produces 0xBB3D for that string you have CRC-16/ARC, while 0x4B37 is Modbus and 0x29B1 is CCITT-FALSE. This calculator shows all five at once so you can match whichever your protocol requires and verify it against the known check value. Remember that a CRC is an error-detection code, not a cryptographic hash: it is fast and catches accidental corruption well, but it is not collision-resistant and provides no security against deliberate tampering.

Common use cases

  • Serial protocols. Compute the Modbus RTU CRC for a frame you are building or debugging.
  • File transfer. Generate or verify the XMODEM CRC used in classic transfer protocols.
  • Embedded systems. Match a device datasheet that specifies a particular CRC-16 variant.
  • Verification. Confirm an implementation by checking its output against the standard 123456789 check value.

Frequently asked questions

Why are there five different results?

CRC-16 is a family, not one algorithm. Each variant uses a different polynomial, initial value, bit-reflection setting, or final XOR, so the same input yields different checksums. Use the variant your protocol specifies.

Which variant does Modbus use?

Modbus RTU uses CRC-16/MODBUS: polynomial 0x8005, initial value 0xFFFF, with input and output reflected. Its check value for "123456789" is 0x4B37.

How do I enter raw bytes instead of text?

Switch Input as to Hex bytes and type hex pairs. Spaces, commas, and 0x prefixes are ignored, so 48 65 6C and 48656C are treated the same.

Is a CRC a secure hash?

No. CRCs detect accidental errors very well but are not cryptographically secure — they are easy to forge deliberately. Use a hash like SHA-256 when you need security.