Here we show the basic method without going into a lot of detail. CRC calculations are performed using modulo 2 arithmetic.
The number G is known to both the transmitter and receiver. G is (r + 1) bits wide and the highest order bit is set to 1. This means that dividing a binary number by G will give a remainder between 0 and (G - 1), that is it will be between 1 and r bits wide.
The CRC is calculated as the remainder when M is shifted left by r bits and then divided by G. That is:
M << r = Q + R
G G
where Q is the quotient and R is the remainder.
As G is (r + 1) bits wide, R is no more than r bits wide.
T = (M << r) – R
There are a few points to note here:
T = (M << r) – R
so:
T = M << r R
G G G
But we know that:
M << r = Q + R
G G
so:
T = Q + R R = Q
G G G
i.e. there is no remainder.
If we find that T divided by Q does give a remainder then the received message is not as transmitted.
M = 10010011
G = 10011
r = 4
Then:
M << r = 100100110000
G 10011
Now for the division:
10001010 remainder 1110
10011|100100110000
10011
10110
10011
10100
10011
1110
Subtracting the remainder from the shifted message we get the transmitted message:
M << r 100100110000
R 1110-
T 100100111110
We can see that this divides exactly by G:
10001010 remainder 0
10011|100100111110
10011
10111
10011
10011
10011
00
But if the message had been corrupted then it is unlikely to be exactly divisible by G. For example:
10111111 remainder 1111
10011|101000111110
10011
11101
10011
11101
10011
11101
10011
11101
10011
11101
10011
11100
10011
1111