CRC calculator with common polynomials
Compute a cyclic redundancy check over text, hex, or binary input using 70+ catalogue presets (CRC-8/16/32/64, CCITT, XMODEM, MODBUS, CRC-32C and more) or a fully custom width, polynomial, init, reflection, and xorout. The engine verifies each preset against its documented check value.
How to use this tool
What it does
Computes CRC values across common polynomials (CRC-16, CRC-32 and variants).
When to use it
Use it when a frame carries a CRC and you need to verify or reproduce it for a specific polynomial.
Worked example
Select CRC-16/CCITT and compute the FCS over a frame body to check it against the trailer.
Input
Result
What a CRC calculator is for
A cyclic redundancy check is an error-detecting code computed by treating your message as the coefficients of a polynomial and taking the remainder after dividing by a fixed generator polynomial. The remainder — the CRC — is appended to the data so a receiver can recompute it and detect transmission or storage errors. CRCs are everywhere in embedded and protocol work: Ethernet frames, USB packets, MODBUS RTU, CAN bus, ZIP/gzip archives, ISO 7816 smart-card transport, and countless proprietary radio and sensor frames.
The catch is that "CRC-16" or "CRC-32" alone does not pin down a value. A CRC variant is defined by six parameters — width, polynomial, initial value, input reflection, output reflection, and a final XOR — and changing any one of them yields a different result for the same bytes. This tool implements one generic bit-by-bit engine, parameterised by those six values and using BigInt internally, so widths from 3 to 64 bits all behave identically and correctly. It ships with 70+ named presets drawn from Greg Cook's well-known reveng catalogue, plus a fully custom mode.
When to use it
Reach for this tool when you are reverse-engineering or implementing a protocol and need to confirm exactly which CRC variant a device uses, when a checksum you computed in one language does not match another stack, or when you are validating firmware that appends a CRC trailer. Selecting a preset immediately recomputes that preset's documented check value — the CRC of the ASCII string 123456789 — and shows a pass/fail badge comparing the computed result against the catalogue figure, so you can trust the engine before trusting any other output. For a plain additive or XOR integrity byte instead of a polynomial CRC, the sibling LRC calculator and checksum tool are the right fit.
Input and output
Choose how your message is interpreted: Text is UTF-8 encoded to bytes; Hex bytes accepts pairs of hex digits with optional spaces, colons, or 0x prefixes; Binary bits accepts 0/1 in groups totalling a whole number of bytes. The result panel reports the byte count and the final CRC in three forms — hexadecimal (zero-padded to the register width), decimal, and binary — and the Copy button copies the hex value. Each render also prints the active six parameters so the result is self-documenting.
Presets
70+ named variants across widths 3–64: CRC-8 family, CCITT-FALSE, XMODEM, KERMIT, MODBUS, USB, X-25, CRC-32, CRC-32C, BZIP2, MPEG-2, the CRC-64 set, and more.
Custom mode
Set width, polynomial, init, RefIn, RefOut, and xorout by hand to match an undocumented device. The same engine runs, so results are consistent with the presets.
Check verification
Every preset's CRC of 123456789 is recomputed live and compared to the documented value, giving you a green pass badge before you rely on the tool.
Common mistakes
- Quoting only the polynomial. Two variants can share a polynomial and still differ by reflection or final XOR. Always nail down all six parameters when reproducing a value elsewhere.
- Reflected vs normal polynomial form. Presets here use the normal (non-reflected, MSB-first) polynomial. If a datasheet lists the reversed form (for example
0xEDB88320for CRC-32), do not type it directly — use the normal form0x04C11DB7and the RefIn/RefOut flags instead. - Hashing the wrong bytes. Decide whether the CRC should cover the header, the payload, or both, and whether the existing trailer bytes are included. Feeding the wrong span is the most common cause of a "wrong" CRC.
- Treating a CRC as cryptographic. CRCs detect accidental errors, not tampering. An attacker can adjust data to keep any CRC intact. For authentication use a MAC such as CMAC instead.
- Endianness of the appended CRC. The CRC value here is a number; how a protocol serialises it (big- or little-endian) is separate. Check the endianness tool when laying the bytes into a frame.
Related tools
LRC calculator
Longitudinal redundancy check — the XOR/sum integrity byte used in many serial protocols.
More utilities
Parsers, decoders, and references for smart-card, protocol, and FIDO engineers.
Frequently asked questions
What do width, poly, init, refin, refout and xorout mean?
These six parameters fully define a CRC variant (the Rocksoft / reveng model). Width is the size of the CRC register in bits. Poly is the generator polynomial in normal (non-reflected) form. Init is the starting value of the register. RefIn reflects each input byte before it is processed, and RefOut reflects the final register. Xorout is XORed into the result at the very end. Two CRCs with the same polynomial but different reflection or xorout produce completely different values.
What is the check value and why verify it?
The check value is the CRC of the nine ASCII bytes "123456789" under a given parameter set, as published in Greg Cook's catalogue. It is a fingerprint for a CRC definition. When you pick a preset this tool recomputes that value with its own engine and shows a pass or fail badge, so you can confirm the implementation and the parameters match the documented algorithm before trusting any other result.
Why does CRC-32 of the same data differ between two libraries?
Almost always because of reflection or final XOR, not the polynomial. The common zlib CRC-32 reflects input and output and XORs the result with all ones; CRC-32/BZIP2 uses the same polynomial but does not reflect; CRC-32/MPEG-2 drops the final XOR. Always pin down all six parameters, not just the polynomial, when reproducing a value from another stack.
Can this tool handle non-standard widths like CRC-5 or CRC-24?
Yes. The engine is a generic bit-by-bit implementation using BigInt, so any width from 3 to 64 bits works, including CRC-3/GSM, CRC-5/USB, CRC-7/MMC, CRC-15/CAN, CRC-24 and the 64-bit variants. Pick a preset or switch to custom mode and set the width, polynomial, init, reflection flags and xorout yourself.
Does any of my input leave the browser?
No. The CRC is computed entirely in JavaScript on this page. Nothing you type as text, hex, or binary is uploaded, logged, or sent to a server, so it is safe for proprietary frame layouts and firmware payloads.