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