crc ccitt calculator

CRC-CCITT Calculator

Calculate 16-bit CRC values for common CCITT variants including CCITT-FALSE, XMODEM, KERMIT, X25, and AUG-CCITT.

For ASCII mode, type plain text. For HEX mode, use values like 01 A0 FF or 0x01,0xA0,0xFF.
CRC result will appear here.

What is a CRC-CCITT calculator?

A CRC-CCITT calculator computes a 16-bit cyclic redundancy check using the CCITT family of settings. Engineers use this checksum in embedded systems, serial protocols, telemetry, Bluetooth layers, packet framing, and file integrity checks. The calculator on this page lets you quickly test payloads and compare results against known standards.

Why CRC-CCITT has multiple variants

Many people say “CRC-CCITT,” but that label alone is ambiguous. Most variants share the same polynomial (0x1021) yet produce different outputs because of different initialization, reflection rules, and final XOR operations.

Variant Poly Init RefIn/RefOut XorOut Check for "123456789"
CRC-CCITT (FALSE) 0x1021 0xFFFF false / false 0x0000 0x29B1
CRC-16/XMODEM 0x1021 0x0000 false / false 0x0000 0x31C3
CRC-16/KERMIT 0x1021 0x0000 true / true 0x0000 0x2189
CRC-16/X25 0x1021 0xFFFF true / true 0xFFFF 0x906E
CRC-16/AUG-CCITT 0x1021 0x1D0F false / false 0x0000 0xE5CC

How to use this CRC CCITT calculator

1) Enter your message bytes

Select ASCII / UTF-8 for regular text strings, or Hex Bytes for protocol frames and raw binary payloads.

2) Choose a preset

If your specification says XMODEM, KERMIT, or X25, pick that preset directly. If your spec lists custom parameters, choose Custom and enter polynomial, init, xorout, refin, and refout manually.

3) Compute and verify

Click Calculate CRC. You’ll get the 16-bit result in hex, decimal, and binary. Compare your output to the protocol’s expected value to confirm byte order and settings.

Common implementation pitfalls

  • Wrong variant: same data + different init/reflection settings = different CRC.
  • Hex parsing mistakes: odd-length hex strings should be corrected before calculation.
  • Text encoding mismatch: UTF-8 bytes differ from UTF-16 internal character storage.
  • Byte order confusion: some protocols transmit high byte first, others low byte first.
  • Including/excluding frame bytes: preamble, length, or delimiter bytes may be excluded by spec.

Practical tips for embedded and protocol work

When validating firmware or test benches, always run at least one known vector like 123456789 with your target variant before testing real packets. Then validate a second vector from your own protocol documentation. This two-step process catches most parameter and endian errors early.

If you’re creating a production parser, store CRC settings as explicit fields rather than hard-coding a single “CRC-CCITT” label. Clear parameter naming (poly/init/refin/refout/xorout) prevents ambiguity across teams and languages (C, Python, JavaScript, Rust, etc.).

🔗 Related Calculators