CRC-16 / CRC-32 Calculator
Compute CRC-16-CCITT and CRC-32 (IEEE 802.3) checksums.
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.