轉載地址:https://blog.csdn.net/ky_heart/article/details/53048692
常見的數據校驗方法
1. 校驗是什么
校驗,是為保護數據的完整性,用一種指定的算法對原始數據計算出的一個校驗值。當接收方用同樣的算法再算一次校驗值,如果兩次校驗值一樣,表示數據完整。
2. 最簡單的校驗
實現方法:將原始數據和待比較的數據直接進行比較,看是否完全一樣。
特點:最安全准確效率最低
適用范圍:簡單的數據量極小的通訊
3. 奇偶校驗
實現方法:在數據存儲和傳輸中,字節中額外增加一個比特位,用來傳送奇/偶校驗位來檢驗錯誤。
奇校驗:所有傳送的數位(含字符的各數位和校驗位)中,“1”的個數為奇數,如:
1 0110,0101
0 0110,0001
偶校驗:所有傳送的數位(含字符的各數位和校驗位)中,“1”的個數為偶數,如:
1 0100,0101
0 0100,0001
特點:能夠檢測出信息傳輸過程中的1位誤碼。
出現錯誤后,不能進行修改,只能要求重發。
簡單,應用范圍廣。
4. CRC循環冗余校驗
實現方法:利用除數以及余數的原理進行錯誤檢測,將接收到的碼組進行除法運算
,如果除盡,則說明傳輸無誤;如果未除盡,則表明傳輸出現差錯。
生成CRC碼的基本原理:任意一個由二進制位串組成的代碼都可以和一個系數僅為‘0’和‘1’取值的多項式一一對應。例如:代碼1010111對應的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應的代碼101111。
CRC碼集選擇的原則:若設碼字長度為N,信息字段為K位,校驗字段為R位(N=K+R),則對於CRC碼集中的任一碼字,存在且僅存在一個R次多項式g(x),使得
V(x)=A(x)g(x)=xRm(x)+r(x);
其中: m(x)為K次信息多項式, r(x)為R-1次校驗多項式,
g(x)稱為生成多項式:
g(x)=g0+g1x+g2x2+...+g(R-1)x(R-1)+gRxR
發送方通過指定的g(x)產生CRC碼字,接收方則通過該g(x)來驗證收到的CRC碼字。
CRC校驗碼軟件生成方法:
借助於多項式除法,其余數為校驗字段。
例如:信息字段代碼為: 1011001;對應m(x)=x6+x4+x3+1
假設生成多項式為:g(x)=x4+x3+1;則對應g(x)的代碼為: 11001
x4m(x)=x10+x8+x7+x4 對應的代碼記為:10110010000;
采用多項式除法: 得余數為: 1010 (即校驗字段為:1010)
發送方:發出的傳輸字段為: 1 0 1 1 0 0 11 0 10
信息字段 校驗字段
接收方:使用相同的生成碼進行校驗:接收到的字段/生成碼(二進制除法)
如果能夠除盡,則正確。
特點:信息字段和校驗字段的長度可以任意選定。
編碼和解碼方法簡單,檢錯和糾錯能力強,在通信領域廣泛地用於實現差錯控制。
具體實現代碼見博客:http://blog.csdn.net/xiaoku
5. bcc異或校驗法
實現方法:將所有數據都和一個指定的初始值(通常是0)異或一次,所得結果為校驗值。接收方收到數據后自己也計算一次異或和校驗值,如果和收到的校驗值一致就說明收到的數據是完整的。
特點:應用於很多基於串口的通訊方法。
6. md5校驗和數字簽名
實現方法:主要有md5和des算法。
適用范圍:數據比較大或要求比較高的場合。如md5用於大量數據、文件校驗,des用於保密數據的校驗(數字簽名)等等。
應用例子:文件校驗、銀行系統的交易數據
如客戶往我們數據中心同步一個文件,該文件使用MD5校驗,那么客戶在發送文件的同時會再發一個存有校驗碼的文件,我們拿到該文件后做MD5運算,得到的計算結果與客戶發送的校驗碼相比較,如果一致則認為客戶發送的文件沒有出錯,否則認為文件出錯需要重新發送