常見的資料校驗方法

2021-09-26 01:14:30 字數 2188 閱讀 9750

校驗,是為保護資料的完整性,用一種指定的演算法對原始資料計算出的乙個校驗值。當接收方用同樣的演算法再算一次校驗值,如果兩次校驗值一樣,表示資料完整。

1. 奇偶校驗

實現方法:在資料儲存和傳輸中,位元組中額外增加乙個位元位,用來傳送奇/偶校驗位來檢驗錯誤。

奇校驗:所有傳送的數字(含字元的各數字和校驗位)中,「1」的個數為奇數,如:

1 0110,0101

0 0110,0001

偶校驗:所有傳送的數字(含字元的各數字和校驗位)中,「1」的個數為偶數,如:

1 0100,0101

0 0100,0001

2.  bcc異或校驗法

實現方法:將所有資料都和乙個指定的初始值(通常是0)異或一次,所得結果為校驗值。接收方收到資料後自己也計算一次異或和校驗值,如果和收到的校驗值一致就說明收到的資料是完整的。 

特點:應用於很多基於串列埠的通訊方法。

3.md5校驗和數字簽名

實現方法:主要有md5和des演算法。 

適用範圍:資料比較大或要求比較高的場合。如md5用於大量資料、檔案校驗,des用於保密資料的校驗(數字簽名)等等。 

應用例子:檔案校驗、銀行系統的交易資料 

如客戶往我們資料中心同步乙個檔案,該檔案使用md5校驗,那麼客戶在傳送檔案的同時會再發乙個存有校驗碼的檔案,我們拿到該檔案後做md5運算,得到的計算結果與客戶傳送的校驗碼相比較,如果一致則認為客戶傳送的檔案沒有出錯,否則認為檔案出錯需要重新傳送。

4. crc演算法

crc原理介紹(通俗講) 

1、傳送端 

1.1、在傳送端先將資料分組,每組k個資料。假定要傳送的資料是m。 

1.2、在資料m後面新增供差錯檢測的n位冗餘碼,然後構成一幀傳送出去,一共傳送(k+n)位。 

雖然新增n位冗餘碼增大了資料傳送的開銷,但是可以進行差錯檢測,當傳輸可能出現差錯時,付出這種代價是值得的。

1.3、冗餘碼可以用下面的方法得出: 

3.1、用二進位製模2運算進行2^n*m(相當於m左移n位)的運算。意思就是在m後面補n個0。現在m就變成了k+n位。 

1.3.2、用m除以收發雙方事先商定的長度為n+1的除數p。 

1.3.3、得到的餘數r,這個r就是fcs(幀檢驗序列)。將這個fcs序列加到m上然後發出去。

2、接受端 

2.1、在接受端把接受到的資料以幀為單位進行crc校驗 

2.2、把收到的每乙個幀都除以同樣的除數p,然後檢查餘數r。 

2.3、如果餘數r為0,如果在傳輸過程中沒有差錯。 

2.4、如果出現誤碼,那麼餘數r為零的概率是非常小的。

總結:在接收端對接收到的每一幀進行crc檢驗後,若餘數r為,則表示這個幀沒有錯,就接受。若r不為0,則判定這個幀出錯,就丟棄。

標準crc生成多項式如下表:

名稱       生成多項式             簡記式*  標準引用

crc-4      x4+x+1                 3         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          80f

crc-16     x16+x15+x2+1           8005      ibm sdlc

crc16-ccittx16+x12+x5+1           1021      iso hdlc, itu x.25, v.34/v.41/v.42, ppp-fcs

crc-32      x32+x26+x23+...+x2+x+104c11db7 zip, rar, ieee 802 lan/fddi, ieee 1394, ppp-fcs

crc-32c     x32+x28+x27+...+x8+x6+1 1edc6f41sctp

生成多項式的最高位固定的1,故在簡記式中忽略最高位1了,如0x1021實際是0x11021。

可以參考這篇部落格:

常見的資料校驗方法

常見的資料校驗方法 1.校驗是什麼 校驗,是為保護資料的完整性,用一種指定的演算法對原始資料計算出的乙個校驗值。當接收方用同樣的演算法再算一次校驗值,如果兩次校驗值一樣,表示資料完整。2.最簡單的校驗 實現方法 將原始資料和待比較的資料直接進行比較,看是否完全一樣。特點 最安全準確效率最低 適用範圍...

CRC校驗方法

協議中使用 crc校驗 crc 2位元組校驗 協議的word上提供了c的 dephi的vb的,但是沒提供c 的,所以根據vb的,我該寫成c 的。記錄一下,以備以後使用。private static int gen crc byte buffer,int bufferlength c convert....

常用校驗方法

是否為空校驗 function isempty s var lll trim s if lll null lll.length 0 return true else return false 刪除字串左邊的空格 function ltrim str if str.length 0 return st...