1、迴圈校驗碼(crc碼):
是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。
2、生成crc碼的基本原理:
任意乙個由二進位制位串組成的**都可以和乙個係數僅為『0』和『1』取值的多項式一一對應。例如:**1010111對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應的**101111。
標準crc生成多項式如下表: 名稱
生成多項式
簡記式*
標準引用
crc-4
x4+x+1
itu g.704
crc-8
x8+x5+x4+1
0x31
crc-8
x8+x2+x1+1
0x07
crc-8
x8+x6+x4+x3+x2+x1
0x5e
crc-12
x12+x11+x3+x+1
80fcrc-16
x16+x15+x2+1
8005
ibm sdlc
crc16-ccitt
x16+x12+x5+1
iso hdlc, itu x.25,,v.34/v.41/v.42, ppp-fcs
crc-32
x32+x26+x23+...+x2+x+1
04c11db7
zip, rar, ieee 802 lan/fddi, ieee 1394, ppp-fcs
crc-32c
x32+x28+x27+...+x8+x6+1
1edc6f41
sctp
3、crc-16校驗碼的使用:
現選擇最常用的crc-16校驗,說明它的使用方法。
根據modbus協議,常規485通訊的資訊傳送形式如下:
位址功能碼
資料資訊
校驗碼
1byte 1byte nbyte 2byte
crc校驗是前面幾段資料內容的校驗值,為乙個16位資料,傳送時,低8位在前,高8為最後。
例如:資訊字段**為: 1011001,校驗欄位為:1010。
傳送方:發出的傳輸欄位為:1 0 1 1 0 0 1 1 0 10
資訊字段
校驗字段
接收方:使用相同的計算方法計算出資訊欄位的校驗碼,對比接收到的實際校驗碼,如果相等及資訊正確,不相等則資訊錯誤;或者將接受到的所有資訊除多項式,如果能夠除盡,則資訊正確。
4、crc-16校驗碼計算方法:
常用查表法和計算法。計算方法一般都是:
(1)、預置1個16位的暫存器為十六進製制ffff(即全為1),稱此暫存器為crc暫存器;
(2)、把第乙個8位二進位制資料(既通訊資訊幀的第乙個位元組)與16位的crc暫存器的低
8位相異或,把結果放於crc暫存器,高八位資料不變;
(3)、把crc暫存器的內容右移一位(朝低位)用0填補最高位,並檢查右移後的移出位;
(4)、如果移出位為0:重複第3步(再次右移一位);如果移出位為1,crc暫存器與多
項式a001(1010 0000 0000 0001)進行異或;
(5)、重複步驟3和4,直到右移8次,這樣整個8位資料全部進行了處理;
(6)、重複步驟2到步驟5,進行通訊資訊幀下乙個位元組的處理;
(7)、將該通訊資訊幀所有位元組按上述步驟計算完成後,得到的16位crc暫存器的高、低
位元組進行交換;
(8)、最後得到的crc暫存器內容即為:crc碼。
以上計算步驟中的多項式a001是8005按位顛倒後的結果。
查表法是將移位異或的計算結果做成了乙個表,就是將0~256放入乙個長度為16位的暫存器中的低八位,高八位填充0,然後將該暫存器與多項式0xa001按照上述3、4步驟,直到八位全部移出,最後暫存器中的值就是**中的資料,高八位、低八位分別單獨乙個表。
下面是我編寫的c#版crc16校驗(逆序):
// 逆序crc表
private byte auccrchi = new byte ;
private byte auccrclo = new byte ;
//通過逆序crc16表, 逆序crc計算
int crc16(byte frame, int length) // 傳入要校驗的陣列名及其長度
return ( int )( crchi << 8 | crclo );// crc校驗返回值 // crchi 向左移動,就是逆序計算的代表
}
CRC16 校驗演算法
1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111對應的多項式為x6 x4 x2 x 1,而多項式為x5...
CRC16校驗演算法實現
迴圈冗餘碼校驗英文名稱為cyclical redundancy check,簡稱crc。它是利用除法及餘數的原理來作錯誤偵測 error detecting 的。實際應用時,傳送裝置計算出crc值並隨資料一同傳送給接收裝置,接收裝置對收到的資料重新計算crc並與收到的crc相比較,若兩個crc值不同...
CRC 16校驗原理
1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc 碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個係數僅為 0 和 1 取值的多項式一一對應。例如 1010111 對應的多項式為x6 x4 x2 x 1 而多項式為...