A **cyclic redundancy check (CRC)** is an error-detecting code designed to detect accidental changes to raw computer data, and is commonly used in digital networks.

A CRC32 algorithm typically takes in a file stream or character array and calculates an unsigned long codeword from the input.

One can transmit this codeword and re-calculate it on the receiver end, then compare it to the transmitted one to detect an error.

## Types of CRC

The most commonly used polynomial lengths are:

- CRC-8: 9 bits
- CRC-16: 17 bits
- CRC-32: 33 bits
- CRC-64: 65 bits

## Data length and CRC Length

The math is pretty simple. An 8-bit CRC boils all messages down to one of 256 values. If your message is more than a few bytes long, the possibility of multiple messages having the same hash value goes up higher and higher.

A 16-bit CRC, similarly, gives you one of the 65,536 available hash values. What are the odds of any two messages having one of these values?

A 32-bit CRC gives you about 4 billion available hash values.