What is the Cyclic Redundancy Check (CRC)?

A Cyclic Redundancy Check performs a mathematical calculation on a block of data and returns a number that represents the content and organization of that data. The idea is to have the CRC return a number that uniquely identifies the data. You can think of CRC as being the operation that generates a "fingerprint" for a block of data. The actual number, or fingerprint, that is used to identify the data is called a checksum.

The CRC is calculated by performing a modulo 2 division of the data by a generator polynomial and recording the remainder after division. Three polynomials are in common use they are:

CRC16 = x16 + x15 + x2+ 1

CRC32 = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1

The main advantage of this algorithm is that it is easy to implement in hardware and it allows recovering errors. But unfortunately it can be helpful only for small data blocks integrity checking. With data size enlargement grows the possibility of passing the errors.

This algorithm is used in Simple File Verification standard (SFV). It's very strange, how it is possible to check something by the same algorithm that passes these errors.