CRC-CCITT Calculator
Calculate 16-bit CRC values for common CCITT variants including CCITT-FALSE, XMODEM, KERMIT, X25, and AUG-CCITT.
01 A0 FF or 0x01,0xA0,0xFF.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.).