循環冗餘校驗碼(CRC)的基本原理是:在K位信息碼後再拼接R位的校驗碼,整個編碼長度爲N位,所以,這種編碼也叫(N,K)碼。對於一個給定的(N,K)碼,能夠證實存在一個最高次冪爲N-K=R的多項式G(x)。根據G(x)能夠生成K位信息的校驗碼,而G(x)叫作這個CRC碼的生成多項式。 校驗碼的具體生成過程爲:假設要發送的信息用多項式C(X)表示,將C(x)左移R位(可表示成C(x)*2R),這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。用 C(x)*2R 除以生成多項式G(x)獲得的餘數就是校驗碼。python
多項式和二進制數有直接對應關係:X的最高冪次對應二進制數的最高位,如下各位對應多項式的各冪次,有此冪次項對應1,無此冪次項對應0。能夠看出:X的最高冪次爲R,轉換成對應的二進制數有R+1位。編碼
多項式包括生成多項式G(X)和信息多項式C(X)。spa
如生成多項式爲G(X)=X4+X3+X+1, 可轉換爲二進制數碼11011。code
而發送信息位 1111,可轉換爲數據多項式爲C(X)=X3+X2+X+1。class
是接受方和發送方的一個約定,也就是一個二進制數,在整個傳輸過程當中,這個數始終保持不變。原理
在發送方,利用生成多項式對信息多項式作模2除生成校驗碼。在接受方利用生成多項式對收到的編碼多項式作模2除檢測和肯定錯誤位置。循環
應知足如下條件:二進制
A、生成多項式的最高位和最低位必須爲1。數據
B、當被傳送信息(CRC碼)任何一位發生錯誤時,被生成多項式作除後應該使餘數不爲0。co
C、不一樣位發生錯誤時,應該使餘數不一樣。
D、對餘數繼續作除,應使餘數循環。
CRC校驗碼位數 = 生成多項式位數 - 1。
注意有些生成多項式的簡記式中將生成多項式的最高位1省略了。
一、將X的最高次冪爲R的生成多項式G(X)轉換成對應的R+1位二進制數。
二、將信息碼左移R位,至關於對應的信息多項式C(X)*2R。
三、用生成多項式(二進制數)對信息碼作除,獲得R位的餘數(注意:這裏的二進制作除法獲得的餘數實際上是模2除法獲得的餘數,並不等於其對應十進制數作除法獲得的餘數。)。
四、將餘數拼到信息碼左移後空出的位置,獲得完整的CRC碼。
【例】假設使用的生成多項式是G(X)=X3+X+1。4位的原始報文爲1010,求編碼後的報文。 解: 一、將生成多項式G(X)=X3+X+1轉換成對應的二進制除數1011。 二、此題生成多項式有4位(R+1)(注意:4位的生成多項式計算所得的校驗碼爲3位,R爲校驗碼位數),要把原始報文C(X)左移3(R)位變成1010 000 三、用生成多項式對應的二進制數對左移3位後的原始報文進行模2除(高位對齊),至關於按位異或: 1010000 1011 ------------------ 0001000 1011 ------------------ 0011 獲得的餘位011,因此最終編碼爲:1010 011
使用相同的生成碼進行校驗:接收到的字段/生成碼(二進制除法) 若是可以除盡,則正確.
1010011/1011 無餘數