Skip to main content
CRC Calc

Which CRC algorithm should I use?

A decision guide for picking a CRC algorithm by protocol, file format, and industry — and what to default to when nothing external dictates the choice.

7 min readFundamentals
01

There is no single best CRC — only a required one

For most projects this is not actually an open question. If code needs to interoperate with an existing protocol, file format, or piece of deployed hardware, that system already defines exactly which CRC model it expects, down to the initial value and final XOR — the task is to identify and match that model, not to choose one. Guessing based on width or popularity produces a checksum that looks plausible and fails every real comparison.

The question "which algorithm should I use" only has a free answer when something new is being designed — a new internal protocol, a new file format, a new device link — with no existing consumer to match. The reference tables below cover the first, far more common case; the last section covers the second.

02

By protocol and file format

When a name is already known — a protocol, a file extension, a transport — match it to the model below rather than assuming a generic CRC-16 or CRC-32 is close enough.

  • Ethernet frames, ZIP, PNG, gzip, general file integrity — CRC-32/ISO-HDLC, the most widely implemented 32-bit CRC, with library support in nearly every language and toolchain.
  • Modbus RTU (industrial serial) — CRC-16/MODBUS, not the same model as CRC-16/CCITT-FALSE despite both being informally called "CRC-16."
  • USB data packets — CRC-16/USB.
  • DNP3 (utility SCADA) — CRC-16/DNP.
  • M-Bus (utility metering) — CRC-16/EN-13757.
  • PROFIBUS (industrial fieldbus) — CRC-16/PROFIBUS.
  • iSCSI, SCTP, and several NVMe transports — CRC32C (catalogued as CRC-32/ISCSI), hardware-accelerated on modern CPUs.
  • POSIX cksum and related Unix file-integrity tooling — CRC-32/CKSUM.
  • .xz archives, Redis Cluster and RDB files, .cab archives, NVMe end-to-end protection — the matching CRC-64 variant (XZ, REDIS, MS, or NVME respectively), not an interchangeable generic CRC-64.
03

By industry: automotive, RFID, telecom, and storage

Industry-specific stacks frequently define their own CRC models rather than reusing a general-purpose one, precisely because "CRC-16" or "CRC-32" alone does not pin down a unique checksum.

  • AUTOSAR E2E — CRC-8/AUTOSAR for short signals, CRC-32/AUTOSAR for larger PDUs; neither is interchangeable with the generic CRC-8 or CRC-32/ISO-HDLC.
  • Classic CAN and CAN FD — the CAN data-link layer defines its own frame CRC (15-bit for classic CAN; 17- or 21-bit for CAN FD depending on payload length) rather than reusing a byte-oriented catalog model.
  • Bluetooth link layer — CRC-8/BLUETOOTH for packet headers.
  • NFC and contactless smart cards (ISO/IEC 14443) — CRC-16/ISO-IEC-14443-3-A for Type A, CRC-16/IBM-SDLC for Type B.
  • RFID transponders — CRC-16/MCRF4XX (Microchip) or CRC-16/TMS37157 (Texas Instruments), depending on the chip family in use.
  • GSM telecom framing — CRC-8/GSM-A, CRC-8/GSM-B, or CRC-16/GSM depending on the specific channel.
  • Payment terminals and UMTS — CRC-16/UMTS, also documented as CRC-16/BUYPASS or CRC-16/VERIFONE (all three names are the same model).
  • SCSI and T10 data-integrity fields — CRC-16/T10-DIF.
  • Aviation data interchange (AIXM) — CRC-32/AIXM.
04

Large files, archives, and long-lived storage

A 32-bit CRC has a fixed collision probability regardless of message length, and for very large files or long-lived datasets that probability becomes large enough to matter — doubling the width to 64 bits reduces the chance of an undetected multi-bit error by roughly 2^32. Use the CRC-64 variant a target format actually specifies rather than a generic one; the CRC-64 guide compares all seven catalogued models and covers which applies to .xz, Redis, .cab files, and NVMe.

05

When nothing dictates the choice

If nothing external pins down the model — a new internal protocol, a new file format, a new device link — the decision comes down to a few practical questions rather than one universal answer.

  • A spec, file format, or existing deployed system defines the model → use exactly that one, verified against its published check value. This is not a free choice.
  • Designing something new, 32 bits of protection is enough, and broad tooling and language support matter most → CRC-32/ISO-HDLC.
  • Designing something new and the target CPUs expose a hardware CRC32C instruction (SSE4.2 crc32 on x86, the ARMv8 CRC32C extension) → CRC32C, for lower computation cost at scale.
  • Very large files, long-lived archives, or a dataset large enough that a 32-bit checksum's collision probability becomes a real risk → move to CRC-64; CRC-64/XZ is a reasonable default with wide library support.
  • A resource-constrained 8-bit microcontroller checksumming short, fixed-length fields → an 8-bit CRC such as CRC-8/MAXIM-DOW is often sufficient and cheaper than a 16- or 32-bit CRC.

Which CRC algorithm should I use? FAQ

Is a wider CRC always the safer choice?

Not automatically. Width increases the space of possible checksums, but detection strength for realistic error patterns also depends on the specific polynomial and the length of data being protected. Matching a spec's required model is always correct; when choosing freely, a well-established width with a widely used polynomial is a safer default than an arbitrary custom polynomial of any width.

Can I just use CRC-32 for everything that is not already specified?

For general-purpose, moderate-size data it is a reasonable default with the widest tooling support. For very large files or long-lived archives, move to CRC-64 instead, since a 32-bit checksum's fixed collision probability becomes a real risk at large enough data volumes.

Apply this reference

Change CRC parameters and compare standard algorithm results using the browser-based calculator.