About the CRC32 Checksum Calculator
This CRC32 checksum calculator computes the standard CRC-32 used by ZIP, gzip, PNG and Ethernet, plus several other popular checksums of the same input: CRC-32C (Castagnoli, used by iSCSI, ext4 and many storage systems), CRC-16/MODBUS, CRC-16/CCITT-FALSE, CRC-8, Adler-32 (used inside zlib streams) and Fletcher-16.
Type or paste text — it is encoded as UTF-8 bytes — or switch to hex mode to checksum raw bytes such as a serial frame or a packet capture. Each result is shown as zero-padded hexadecimal, and CRC-32 is also shown as an unsigned decimal, which is what many APIs and databases store.
Embedded developers checking a Modbus frame, engineers verifying a firmware image header and programmers matching a checksum from another library will all find it handy. Checksums detect accidental corruption; they are not cryptographic, so use a SHA-256 hash when you need tamper resistance.
How to use the crc32 checksum calculator
- 1Paste text or hex bytes into the data box.
- 2Choose Text (UTF-8) or Hex bytes as the input format.
- 3Read the CRC-32 at the top, plus the other checksums below it.
- 4Copy the value in the format your system expects (hex or decimal, upper or lower case).
Formula and method
A cyclic redundancy check treats the data as a long binary polynomial and divides it by a fixed generator polynomial using XOR arithmetic; the remainder is the checksum. Each named CRC is defined by its width, polynomial, initial value, whether bits are reflected and a final XOR. CRC-32 uses polynomial 0x04C11DB7 (reflected 0xEDB88320) with initial value and final XOR 0xFFFFFFFF; CRC-32C uses 0x1EDC6F41; CRC-16/MODBUS uses reflected 0x8005 with initial 0xFFFF; CRC-16/CCITT-FALSE uses 0x1021 with initial 0xFFFF; CRC-8 uses 0x07.
Adler-32 keeps two running sums modulo 65,521 (the largest prime below 2¹⁶): A starts at 1 and adds each byte, and B adds each new A. Fletcher-16 is the same idea with two 8-bit sums modulo 255. The calculator uses table-driven CRC routines and checks against the standard test string "123456789".
- M(x)
- Message bits as a polynomial
- G(x)
- Generator polynomial of degree n
- A, B
- Adler/Fletcher running sums
Worked examples
The pangram test string
"The quick brown fox jumps over the lazy dog" is 43 ASCII bytes. Its CRC-32 is the well-known 0x414FA339 (1,095,738,169 as an unsigned integer), and its Adler-32 is 0x5BDC0FDA.
Standard check value "123456789"
CRC catalogues publish the checksum of the nine ASCII digits "123456789" for each algorithm. Matching CBF43926 for CRC-32, E3069283 for CRC-32C, 4B37 for Modbus and 29B1 for CCITT-FALSE confirms the parameters are right.
Modbus RTU request frame in hex
A Modbus "read 10 holding registers from address 0 on slave 1" request is 01 03 00 00 00 0A. Its CRC-16/MODBUS is 0xCDC5, which is transmitted low byte first, so the complete frame is 01 03 00 00 00 0A C5 CD.
Frequently asked questions
What is a CRC32 checksum used for?+
CRC-32 detects accidental changes to data. ZIP and gzip archives, PNG images and Ethernet frames store a CRC-32 so the receiver can recompute it and spot corruption from bad storage or noisy links.
Is CRC32 secure enough to verify downloads?+
No. A CRC is easy to forge deliberately — anyone can change a file and adjust a few bytes to keep the same CRC. For integrity against tampering use a cryptographic hash such as SHA-256.
Why does my CRC32 differ from another tool?+
Usually the input bytes differ (a trailing newline, Windows CRLF line endings, or text encoding), or the other tool uses a different variant such as CRC-32C, CRC-32/BZIP2 or a non-inverted output. Check the bytes count and the variant name.
What is the difference between CRC-32 and CRC-32C?+
They use different generator polynomials: CRC-32 uses 0x04C11DB7, CRC-32C (Castagnoli) uses 0x1EDC6F41, which has better error detection for some message lengths and has a dedicated instruction on modern x86 and ARM CPUs.
What is the CRC-32 of an empty string?+
The CRC-32 of zero bytes is 0x00000000, because the initial value 0xFFFFFFFF is XORed with the same final value. Adler-32 of empty input is 0x00000001, since its A sum starts at 1.