CRC校驗碼,中文是循環冗余校驗碼。在計算機網絡、計算機組成原理等課程中均常見,他是一種常見的計算機校驗碼。它的實際原理十分容易理解:簡單的說,它的原理就是用一個數去除以約定好的數。如果傳輸前后的數據除以這個數,所得余數一樣,則傳輸正確,反之傳輸錯誤。
先舉一個十進制的例子,用81除以6,得13,余3. 81就相當於信息位,余數就相當於校驗位。添加校驗位的目的就是確保余數為0.(這里只是舉個例子)
現在用二進制來考慮。在這里以一道例題為准:給出生成多項式G(x)=x3+x2+1 信息碼為101001,求對應的CRC碼。
1)對於這道題,生成多項式最高次為3,信息碼為6,那么CRC碼對應為9位。
2)生成多項式寫開,即G(x)=1*x3+1*x2+0*x1+1 這就意味着約定的除數為1101.已知信息碼和除數,進行豎式模2除。
說明:模2除和普通的豎式除法差別不大,被除數在不足時也需要補零,但是在除得當前位的商時,以最高位為准,目的是消掉目前還剩下的被除數的最高位。此外,在減法時變成了異或計算。
101001除以1101,求得最后的余數為001,001即為校驗位。詳細計算過程如下所示:
3)接收方收到101001 001后,用1101模2除,余數為000,即表示傳輸無誤。
如果余數不是0,比如001,那么就意味着出錯位為第一位,余數002表示第二位出錯。。。。。之所以成為循環冗余校驗,就是因為用出錯的碼除以余數,會得到下一個出錯碼,如xxxx001除以余數變成xxx010.。。。如此往復。
CRC校驗碼可以檢測出奇數個、雙比特和所有小於。等於校驗位長度的校驗碼。