Checksum calculator
CRC-32, CRC-32C, Adler-32, CRC-16 variants, FNV-1a and Java hashCode for text or raw bytes.
| Algorithm | Hex | Decimal |
|---|
Checksums for protocols, files and debugging
When two systems disagree about whether a message arrived intact, the first question is whether they compute the same checksum over the same bytes. Kafka record batches use CRC-32C, ZIP and PNG use CRC-32, zlib uses Adler-32, Modbus uses a CRC-16: each with its own polynomial, starting value and bit order, which is why "I computed the CRC and it does not match" is such a common problem.
Type text or paste hex bytes and the calculator shows CRC-32, CRC-32C, Adler-32, four common CRC-16 variants (ARC, MODBUS, CCITT-FALSE and XMODEM), FNV-1a in 32 and 64 bits, and, for text, Java's String.hashCode(). Every implementation is checked against the published check values: the CRC of the ASCII string 123456789 is 0xCBF43926 for CRC-32 and 0xE3069283 for CRC-32C. Results are shown in hexadecimal and decimal.
Use the right tool
- Detecting accidental corruption: CRC or Adler. Detecting tampering: a cryptographic hash or MAC (see the hash generator).
- For bucket assignment in a hash table or partitioner, use the hash your platform specifies (Kafka's partitioner uses murmur2; see the Kafka calculator).
- Different CRC-16 variants are easy to confuse; match the polynomial, init value and reflection, not just the name.
Calculation happens in your browser. Large inputs are best verified with a command-line tool.
Frequently asked questions
What is the difference between a checksum and a cryptographic hash?
A checksum such as CRC-32 detects accidental corruption and is very fast, but it is easy to forge on purpose. A cryptographic hash (SHA-256) is designed so that no one can find two inputs with the same output. Use CRC for integrity checks in protocols and formats, SHA-256 or better for security.
Where are these algorithms used?
CRC-32 in ZIP, gzip, PNG and Ethernet; CRC-32C in Kafka record batches, iSCSI and storage systems; Adler-32 in zlib; CRC-16 variants in Modbus, XMODEM and many embedded protocols; FNV-1a in hash tables.
How do I compute these in Java?
Use java.util.zip.CRC32, CRC32C and Adler32: var c = new CRC32(); c.update(bytes); long v = c.getValue();. For String.hashCode, call "text".hashCode().
Why does the result depend on text encoding?
Checksums are computed over bytes. This tool encodes text as UTF-8; if your system uses another encoding (or a different line ending) the bytes, and the checksum, differ. Switch to hex input to check exact bytes.