The standard way to calculate CRC32 for ZIP archives, PNG images, gzip streams, and most embedded checksums is to run CRC-32/ISO-HDLC over the exact payload bytes and read the resulting 32-bit value as eight lowercase hexadecimal digits; for the nine ASCII bytes of "123456789" that value is cbf43926. Knowing that one canonical check value lets you confirm you are running the right variant, with the right bytes, before trusting any other result. The CRC32 Calculator implements exactly that ISO-HDLC variant and exposes both a UTF-8 text mode and a hexadecimal byte mode so you can match the byte sequence a specification describes.

Most people searching "calculate CRC32" want one of three things: a checksum to drop into a file header, a value to compare against a published digest, or a sanity check on a downloaded payload. Each of those tasks reduces to the same core operation: feed a known byte sequence into the CRC-32/ISO-HDLC algorithm and read out the eight-digit hex result. The catch is that several 32-bit CRC formulas share the "CRC32" name, and they produce different numbers over the same input. Choosing correctly matters more than the arithmetic, which is why the calculator fixes the parameters and forces you to pick between text and hex at the input stage rather than as a hidden setting.

calculate crc32
calculate crc32

What "Calculate CRC32" Actually Means

When a tool says it can "calculate CRC32," it should specify which 32-bit polynomial, which initial register value, and which final XOR it applies. The CRC32 Calculator implements CRC-32/ISO-HDLC, the variant codified in RFC 1952 (the GZIP specification) and used by the zlib C library, ZIP archives, PNG images, and many other formats. ISO-HDLC processes input least-significant bit first against a reflected polynomial, then complements the register before formatting.

The output is always a 32-bit number. Displaying it as eight lowercase hexadecimal digits is the convention, which is why leading zeros matter: a result of 00a1b2c3 is not the same number as a1b2c3 even though they often get shortened in conversation. Treat any quoted "CRC32" digest as exactly eight hex digits, no more and no fewer, and write the letters in lowercase to match the calculator.

The Parameters Behind CRC-32/ISO-HDLC

The following parameters define this variant. Any tool that uses different values is computing a different formula, even if it also calls its output "CRC32".

ParameterValueMeaning
Width32 bitsSize of the register and result
Reflected polynomial0xEDB88320Used to build the 256-entry lookup table
Initial register0xFFFFFFFFState before the first input byte
Input reflectionYes (per byte)Bits processed least-significant first
Final XOR0xFFFFFFFFApplied after the last byte
Check value for "123456789"0xCBF43926Canonical ISO-HDLC self-test
Output format8-digit lowercase hexWhat the calculator displays

If your expected check value for "123456789" is not cbf43926, the other system is using a different variant (CRC-32C, MPEG-2, BZIP2, Koopman, JAMCRC, or another) or a different byte range. The check value is the simplest way to discriminate, and it is the first thing to verify before trusting any other output the tool produces.

A Worked Example: "123456789"

To make the parameter table tangible, run the algorithm over a fixed input. Take the ASCII string "123456789", which is nine bytes with hex values 31 32 33 34 35 36 37 38 39. Set the register to 0xFFFFFFFF. For each byte, XOR the byte with the low register octet, look up the corresponding remainder in the 256-entry table built from polynomial 0xEDB88320, and combine that remainder with the register shifted right by eight bits. After all nine bytes, XOR the register with 0xFFFFFFFF and format the result as eight lowercase hex digits.

The result is 0xCBF43926, written as cbf43926. That is the published check value for CRC-32/ISO-HDLC and matches the entry in the parameters table above. The full table-driven derivation is described in the practical sample method in RFC 1952, and the zlib manual documents the same algorithm as its default checksum, which is why "zlib checksum" and "CRC-32/ISO-HDLC" refer to the same formula.

How to Calculate CRC32 With the CRC32 Calculator

The CRC32 Calculator runs the algorithm entirely on-device, so the bytes you submit never leave the browser. The fixed-parameter design means you cannot accidentally drift to a different variant; what you choose is only the input mode.

  1. Identify the exact CRC variant and the covered byte range from the governing format. This page implements CRC-32/ISO-HDLC, the variant that should produce cbf43926 for the ASCII bytes of "123456789".
  2. Decide whether your payload is meant to be interpreted as text or as a raw byte sequence. Choose text mode only when UTF-8 is explicitly correct; otherwise paste bytes as hex.
  3. Enter the payload. For text, type or paste the string; for hex, use an even number of hexadecimal digits without prefixes, separators other than whitespace, or comments. Input is limited to 5,000,000 bytes so table-driven processing remains responsive.
  4. Calculate and read the eight-digit lowercase hexadecimal result. The value is treated as unsigned and is never truncated.
  5. Compare all eight digits, including leading zeros, against the expected value. Treat a match as evidence of accidental-error consistency, not as security authenticity.

A fuller walkthrough of the input rules appears in the guide on generating CRC32 from text or hex bytes.

Text Mode vs Hex Mode: When Each One Applies

The two input modes are not interchangeable. The calculator encodes text as UTF-8 before processing, so the ASCII string "123456789" contributes nine single-byte characters, but the string "café" contributes five bytes (63 61 66 C3 A9) and the emoji "🧮" contributes four bytes. If your source uses UTF-16, a legacy code page, normalized Unicode, or different newline conventions, the text-mode result will diverge from the value you were expecting.

Hex mode removes whitespace between byte pairs but otherwise requires an even number of hexadecimal digits; each two digits become one byte. Prefixes like "0x", separators other than whitespace, comments, and odd trailing nibbles are rejected. Leading 00 bytes are preserved and they do affect the result, so a payload that begins with null bytes is not the same as one that does not. When a protocol gives exact bytes, use hex mode instead of retyping them as visible text.

ScenarioRecommended modeReason
Computing a digest to compare against a published specHexMatches the exact byte sequence the spec covers
Hashing a log line or short messageText (UTF-8)Direct entry, no re-encoding risk
Verifying a header that may include NUL bytesHexPreserves leading zeros and any nulls
Checking a string containing emoji or CJK charactersHex (after explicit UTF-8 conversion)Avoids surprise multibyte length changes

Reading the Eight-Digit Output and Comparing It

The calculator formats the result as eight lowercase hex digits, padded with leading zeros. The value is treated as unsigned, so the maximum is ffffffff. The output is never silently truncated; even a value like 0x00000001 displays as 00000001. Empty programmatic input has CRC 00000000, although the user interface asks for data so an accidental empty click does not look like a meaningful verification.

When comparing against a published digest, match digit for digit. Tools that strip leading zeros, change case, or prefix the value with "0x" can hide a mismatch. Treat any unexplained difference as a real difference; common causes are the wrong variant, the wrong byte range, or a different newline convention. Cross-checking with the published check value for "123456789" is the fastest way to confirm you have aligned the variant before going further.

Where CRC32 Falls Short

CRC is a cyclic redundancy check designed to detect common accidental changes in data, not to authenticate it. The CRC32 algorithm is not encryption, a cryptographic hash, a message authentication code, a digital signature, or proof of origin. It is linear and easy to manipulate intentionally, so an attacker who wants a particular CRC can produce matching bytes without knowing your payload. Do not use it to verify untrusted software, authorize commands, protect credentials, or establish that a file came from a trusted publisher. For adversarial integrity, rely on a cryptographic digest such as SHA-256 or HMAC and an authenticated distribution channel. The variant details and the distinction from authentication are also discussed in the IETF's gzip specification and the zlib manual.

Other 32-Bit Variants You Might Confuse It With

Many systems use the "CRC32" label for formulas with different polynomials or different initial and final transformations. The CRC32 Calculator implements only CRC-32/ISO-HDLC. If your expected check for "123456789" is not cbf43926, the other system likely uses one of the variants below or covers a different byte range.

VariantCommon nameNotes
CRC-32/ISO-HDLCCRC32, zlib, PNG, ZIPPolynomial 0xEDB88320; check cbf43926
CRC-32CCastagnoli, iSCSI, SCTPPolynomial 0x82F63B78; check e3069283
CRC-32/MPEG-2MPEG-2, BZIP2Non-reflected polynomial 0x04C11DB7; check 0376E6E7
CRC-32/KoopmanKoopmanPolynomial 0xEB31D82E; check 765E7680
CRC-32/JAMCRCJAMCRCISO-HDLC without the final XOR; check 340bc6d9

Spotting the variant matters because cross-checking "CRC32" values between two systems that use different formulas will always fail. The check value column in the table above is the fastest way to confirm which one you have, and it is the same self-test the calculator's parameters were anchored to.