CRC CalculationV15.9.0

Toolbox: CRC calculator
ParameterValue
CRCCoefficientsPolynomial
D24+D23+D18+D17+D14+D11+D10+D7+D6+D5+D4+D3+D+1
Input length
Input data
Parity bits100100000010001011001001

Explanation of the CRC calculation steps

  1. Line the input bits in a row, a0 at the left-most position and aA-1 at the right most position.
  2. Pad the input bits by L zeros to the right side. L + 1 is the length of the polynomial.
  3. Divide the padded bits with the coefficients of the polynomial. The remainder are the CRC bits. The division steps are listed in table below:
Polynomial coefficientsInput dataPadding
000000000000000000000000
Dividing results
1100001100100110011111011111011000000000000000000
000110100000000000000000
011001111000000000000000
111110001110000000000000
100111110011100000000000
101011001101010000000000
111000000010111100000000
110001100101001010000000
010101010110110001000000
001100011010001111110000
000000111100010000101000
000110101111011111000100
000101100110111000110010
100100000010001011001001

Denote the input bits to the CRC computation by a0, a1, a2, a3, ..., aA-1, and the parity bits by p0, p1, p2, p3, ..., pL-1, where A is the size of the input sequence and L is the number of parity bits. The parity bits are generated by one of the following cyclic generator polynomials:

  1. - gCRC24A(D)=[D24+D23+D18+D17+D14+D11+D10+D7+D6+D5+D4+D3+D1+1] for a CRC length L=24;
  2. - gCRC24B(D)=[D24+D23+D6+D5+D1+1] for a CRC length L=24;
  3. - gCRC24C(D)=[D24+D23+D21+D20+D17+D15+D13+D12+D8+D4+D2+D+1] for a CRC length L=24;
  4. - gCRC16(D)=[D16+D12+D5+1] for a CRC length L=16;
  5. - gCRC11(D)=[D11+D10+D9+D5+1] for a CRC length L=11;
  6. - gCRC6(D)=[D6+D5+1] for a CRC length L=6.

The encoding is performed in a systematic form, which means that in GF(2), the polynomial: a0DA+L-1+a1DA+L-2+...+aA-1DL+p0DL-1+p1DL-2+...+pL-2D1+pL-1 yields a remainder equal to 0 when divided by the corresponding CRC generator polynomial.

The bits after CRC attachment are denoted by b0, b1, b2, b3,..., bB-1 where B = A + L. The relation between ak and bk is:

bk = ak for k = 0,1,2,...,A-1

bk-A = ak for k = A, A+1, A+2, ..., A+L-1

Notes:

CRC is an error detecting code to detect accidental changes to raw data. Blocks of input data get a short check value attached, based on the remainder of a polynomial division of their contents. Receiver performs the same CRC calculation to detect data corruption. Specification of a CRC code requires definition of a generator polynomial. This polynomial becomes the divisor in a polynomial long division, which takes the input data as the dividend and in which the quotient is discarded and the remainder becomes the result.

Commonly used CRCs employ the Galois field of two elements, GF(2). The two elements are usually called 0 and 1, matching computer architecture.

A CRC is called an n-bit CRC when its check value is n bits long. For a given n, multiple CRCs are possible, each with a different polynomial. Such a polynomial has highest degree n, which means it has n + 1 terms. In other words, the polynomial has a length of n + 1.