What this CRC16 calculator does
This tool computes a 16-bit cyclic redundancy check (CRC) for your input data. CRCs are widely used in networking, embedded systems, serial protocols, storage, and firmware updates to catch accidental data corruption. If a byte changes in transit, the CRC often changes too, making integrity checks fast and reliable.
Supported CRC-16 variants
CRC-16 is a family of algorithms, not a single universal value. Different systems use different settings. This calculator includes common presets and a custom mode:
- CRC-16/CCITT-FALSE (Poly 0x1021, Init 0xFFFF, no reflection)
- CRC-16/IBM (ARC) (Poly 0x8005, Init 0x0000, reflected)
- CRC-16/MODBUS (Poly 0x8005, Init 0xFFFF, reflected)
- CRC-16/XMODEM (Poly 0x1021, Init 0x0000, no reflection)
- CRC-16/KERMIT (Poly 0x1021, Init 0x0000, reflected)
- CRC-16/X25 (Poly 0x1021, Init 0xFFFF, reflected, XOR out 0xFFFF)
- CRC-16/DNP (Poly 0x3D65, Init 0x0000, reflected, XOR out 0xFFFF)
How to use it
1) Pick a preset
Start with a preset used by your protocol. If your documentation gives exact polynomial and flags, choose Custom and enter those settings manually.
2) Choose input format
Use Text (UTF-8) for normal strings. Use Hex Bytes when your source data is raw bytes.
In hex mode, both 313233 and 31 32 33 are accepted.
3) Calculate and compare
Click Calculate CRC16 and compare the result against your expected checksum. A mismatch usually means:
- Wrong CRC variant (poly/init/reflection/XOR out)
- Wrong byte order when appending CRC to packets
- Different text encoding or hidden characters in the payload
Known reference check
For the test string 123456789, CRC-16/CCITT-FALSE should return 0x29B1.
The calculator starts with this exact example so you can quickly confirm behavior.
CRC16 quick notes for developers
- The polynomial defines the feedback taps in the CRC register.
- RefIn and RefOut control bit reflection behavior and are protocol-specific.
- Init and XOR out change the final value significantly even with the same polynomial.
- Always verify against at least one published test vector from your protocol spec.
If you are integrating this in firmware, script tooling, or backend validation, this calculator can act as a sanity check during debugging and unit test setup.