CRC-16 / CRC-32 Calculator

Compute CRC-16-CCITT and CRC-32 (IEEE 802.3) checksums.

Open tool

Overview

The CRC-16 and CRC-32 calculator computes cyclic redundancy checks used by Ethernet, ZIP, PNG, and countless serial protocols. Paste text, hex bytes, or upload a small payload, and the tool returns both common CRC variants side by side so you can verify the right polynomial is in play.

Embedded engineers debugging UART frames, file-format hackers verifying ZIP central directory checksums, and protocol implementers writing tests for new transports all need a quick CRC-16 / CRC-32 checksum tool. CRCs are not cryptographically secure but they are cheap, fast, and built into almost every transport layer.

How it works

A CRC treats the input as a polynomial over GF(2) and divides it by a generator polynomial. CRC-16-CCITT uses the polynomial 0x1021 (x16 + x12 + x5 + 1) with an initial register of 0xFFFF and no final XOR — the variant used in HDLC, XMODEM, and Bluetooth. CRC-32 (IEEE 802.3) uses 0x04C11DB7 (x32 + x26 + x23 + ... + 1), reflected input and output, initial value 0xFFFFFFFF, and a final XOR of 0xFFFFFFFF. The tool processes bytes through a precomputed 256-entry lookup table, which is the standard table-driven implementation taught in every embedded textbook.

Examples

Input:  "123456789"
CRC-16-CCITT: 0x29B1
CRC-32 IEEE:  0xCBF43926
Input:  "" (empty)
CRC-16-CCITT: 0xFFFF
CRC-32 IEEE:  0x00000000
Input:  "The quick brown fox"
CRC-32 IEEE:  0xB74574DE
Input:  hex bytes 31 32 33 34 35 36 37 38 39
CRC-32 IEEE:  0xCBF43926  (same as "123456789")

FAQ

Which CRC-16 variant does this use?

CRC-16-CCITT (poly 0x1021, init 0xFFFF, no reflection, no final XOR). Different variants (CRC-16-IBM, CRC-16-MODBUS, XMODEM) use the same polynomial with different init/XOR/reflection settings. Always confirm the spec for your protocol before comparing values.

Is CRC-32 cryptographic?

No. It is built to detect random errors and burst errors during transmission, not to resist adversaries. Two different inputs can be crafted to share a CRC-32 in milliseconds.

Why does the empty-string CRC differ from zero in some calculators?

Because of the initial register value and final XOR. CRC-32 starts at 0xFFFFFFFF and XORs the final register with 0xFFFFFFFF, so an empty input ends at 0x00000000 — but other variants without the final XOR produce 0xFFFFFFFF for the same empty input.

Can I compute CRC over binary data?

Yes. Paste hex bytes (with or without 0x prefixes and separators) and the tool will treat them as raw bytes. UTF-8 text is encoded to its raw bytes before the CRC starts.

Try CRC-16 / CRC-32 Calculator

An unhandled error has occurred. Reload ×