Crc

A CRC, short for cyclic redundancy check, is an error-detection technique that computes a short, fixed-length check value from a block of data using binary polynomial division, attaches that check value to the data, and lets a receiver recompute the same calculation to verify the data arrived intact — a far more powerful error-detection method than a single parity bit, catching entire categories of corruption that parity's simple 1-bit-count approach mathematically cannot see at all. Because a CRC treats the data as coefficients of a polynomial and divides it by a fixed, carefully chosen generator polynomial, the remainder from that division becomes the check value, and a receiver performing the identical division and getting a different remainder than expected knows with near certainty that something changed in transit. How a CRC actually gets computed at the source and verified at the destination looks like this:

Data block treated as a binary polynomial
Each bit becomes a coefficient in the polynomial representation
Polynomial division against a fixed generatorSame generator polynomial used at both sender and receiver
Data polynomial divided by generator polynomial
Binary division, using XOR instead of ordinary subtraction
Remainder extracted as the CRC check value
A fixed number of bits, independent of the original data's length
↻ next data block
CRC value attached and sent along with the data
Receiver repeats the identical division to verify

A few things are worth knowing about why polynomial division catches far more corruption than simply counting bits ever could:

A CRC's error-detection power comes directly from the mathematical structure of polynomial division, which guarantees detection of every single-bit error, every error confined to a short burst of consecutive bits up to the CRC's own length, and the overwhelming majority of longer or more scattered error patterns — a dramatically broader guarantee than a single parity bit's narrow single-bit-only coverage. Because the data is divided by a generator polynomial chosen specifically for strong mathematical error-detection properties, nearly any change to the data alters the remainder in a way the receiver's recomputation will catch, including exactly the kind of multi-bit burst errors that slip straight past simple parity undetected. A longer CRC, using more check bits, catches an even broader range of possible corruption patterns, which is why network protocols moving large amounts of data, where burst errors from electrical noise or transmission glitches are a real, routine occurrence, rely on CRCs with 16 or 32 check bits rather than a single parity bit that would miss the exact kind of corruption those links actually experience.

CRC vs. Parity: Coverage Comparison same underlying goal, very different mathematical guarantee Single Parity Bit ✓ catches: any single-bit error ✗ misses: any even number of flipped bits ✗ misses: most burst errors cost: 1 extra bit, trivial computation adequate only for rare, isolated single-bit corruption CRC (polynomial division) ✓ catches: all single-bit errors ✓ catches: all burst errors up to CRC length ✓ catches: vast majority of other patterns cost: 16-32 extra bits, more computation standard for networking, storage, file integrity checks more check bits and real polynomial structure buys dramatically broader error coverage

A CRC, like a parity bit, can only detect that corruption happened — it carries no information pinpointing which specific bit or bits were wrong, which is exactly why CRC-protected systems respond to a detected mismatch by discarding the data and requesting retransmission, not by attempting to repair it. The remainder produced by polynomial division is a single summary value computed across the entire data block, and a mismatch between the expected and recomputed remainder proves something changed somewhere in that block without identifying where — the same fundamental limitation a parity bit has, just applied across a far more powerful detection mechanism. This is why network protocols using CRCs, like Ethernet, rely on the sender simply retransmitting any frame whose CRC check fails at the receiver, rather than the receiver attempting any kind of automatic bit-level correction — detection and correction remain two genuinely separate problems, and a CRC, however strong its detection coverage, only solves the first one.

Ethernet frames, ZIP file archives, and disk storage all rely on CRC checks constantly, specifically because each of those contexts moves or stores large amounts of data where even a small per-bit error rate adds up to a near-certainty of some corruption occurring somewhere across millions or billions of transferred or stored bits. An Ethernet frame carries a CRC specifically to catch corruption introduced by electrical noise, interference, or marginal cabling during transmission across a physical network link; a ZIP archive's CRC lets software verify that a decompressed file matches exactly what was originally compressed, catching storage media errors or transfer corruption that occurred anywhere between compression and decompression; a hard drive or SSD's internal error checking uses CRC-style calculations to detect whether data read back from physical storage media matches what was actually written. In every one of these cases, the actual error rate per bit is extremely low, but the sheer volume of data moved or stored makes CRC verification essential — without it, rare but real corruption events would silently and gradually degrade files, transmitted data, and stored data over time with no way to even know it was happening.

Choosing a specific generator polynomial is itself a genuine engineering decision with real mathematical consequences, which is why widely used CRC variants like CRC-32, used in Ethernet and ZIP files, and CRC-16, common in simpler serial protocols, use carefully selected, standardized polynomials rather than an arbitrary choice. Different generator polynomials provide measurably different error-detection strength against different kinds of likely error patterns, and decades of mathematical analysis and practical testing across real communication systems have converged on a handful of specific, well-studied polynomial choices that are now used as de facto industry standards, embedded directly into chip hardware, network protocol specifications, and widely used compression file formats. Using a standardized, well-analyzed polynomial rather than an arbitrary one matters because a poorly chosen generator polynomial can leave unexpected gaps in its error-detection coverage — gaps a standardized polynomial, vetted through extensive real-world use, has already been shown not to have.

Read a CRC as parity's more capable, mathematically grounded sibling, not a wholly different idea: both reduce a data block down to a short check value and both can only detect, never correct, but a CRC's polynomial division structure catches entire categories of burst and multi-bit corruption that a single parity bit's simple count-of-ones approach mathematically cannot see — which is exactly why CRCs, not plain parity, are the standard integrity check underneath essentially every network protocol, compressed file, and storage system moving meaningful volumes of data today.

Take crc further

Ask the copilot about this term, or have our engineers assess it against your process.