1. 程式人生 > >幾種常用的資料校驗方式

幾種常用的資料校驗方式

我們知道資料在傳輸過程中,可能會存在資料出錯的情況。為了保證資料傳輸的正確性,因此會採取一些方法來判斷資料是否正確,或者在資料出錯的時候及時發現進行改正。常用的幾種資料校驗方式有奇偶校驗、CRC校驗、LRC校驗、格雷碼校驗、和校驗、異或校驗等。

一、奇偶校驗

1. 定義

根據被傳輸的一組二進位制程式碼中“1”的個數是奇數或偶數來進行校驗。

使用:通常專門設定一個奇偶校驗位,存放程式碼中“1”的個數為奇數還是偶數。若用奇校驗,則奇偶校驗位為奇數,表示資料正確。若用偶校驗,則奇偶校驗位為偶數,表示資料正確。

2. 應用

eg.  資料位為 10001100 (1)  -> 最後一位為校驗位

此時若約定好為奇校驗,那麼資料表示為正確的,若為偶校驗,那麼資料傳輸出錯了。

二、CRC校驗(迴圈冗餘校驗碼)

1. 定義

CRC校驗是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊欄位和校驗欄位的長度可以任意選定。迴圈冗餘檢查(CRC)是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。

2. 計算過程: 
a> 設定CRC暫存器,並給其賦值FFFF(hex)。 
b> 將資料的第一個8-bit字元與16位CRC暫存器的低8位進行異或,並把結果存入CRC暫存器。 
c> CRC暫存器向右移一位,MSB補零,移出並檢查LSB。 
d> 如果LSB為0,重複第三步;若LSB為1,CRC暫存器與多項式碼相異或。

e> 重複第3與第4步直到8次移位全部完成。此時一個8-bit資料處理完畢。

f> 重複第2至第5步直到所有資料全部處理完成。

g> 最終CRC暫存器的內容即為CRC值。

常用的CRC迴圈冗餘校驗標準多項式如下:   CRC(16位) = X16+X15+X2+1   CRC(CCITT) = X16+X12 +X5+1 
CRC(32位) = X32+X26+X23+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1 
以CRC(16位)多項式為例,其對應校驗二進位制位列為1 1000 0000 0000 0101。 

3. 應用:在傳送端根據要傳送的k位二進位制碼序列,以一定的規則產生一個校驗用的r位監督碼(CRC碼),附在原始資訊後邊,構成一個新的二進位制碼序列數共k+r位,然後傳送出去。在接收端,根據資訊碼和CRC碼之間所遵循的規則進行檢驗,以確定傳送中是否出錯。

三、LRC校驗

1. 定義:LRC校驗用於ModBus協定的ASCII模式,這各校驗比較簡單,通訊速率較慢,它在ASCII協議中使用,檢測了訊息域中除開始的冒號及結束的回車換行號外的內容。它僅僅是把每一個需要傳輸的資料位元組迭加後取反加1即可。

2. 應用

eg. 5個位元組:01H+03H+21H+02H+00H+02H = 29H,然後取2的補碼=D7H。

四、格雷碼校驗

1. 定義

格雷碼是一種無權碼,也是一種迴圈碼。是指任意兩組相鄰的程式碼之間只有一位不同,其餘為都相同。

如:5的二進位制為0101    6的二進位制為0110

        5的格雷碼為0111    6的二進位制為0101

五、校驗和

1. 定義

校驗一組資料項的和是否正確。通常是以十六進位制為數製表示的形式。如果校驗和的數值超過十六進位制的FF,也就是255。

2. 應用

eg. 資料01020304的校驗和為a。

六、異或校驗

1. 定義

BCC校驗其實是奇偶校驗的一種,但也是經常使用並且效率較高的一種。所謂BCC校驗法,就是在傳送前和傳送後分別把BCC以前包括ETX字元的所有字元按位異或後,按要求變換(增加或去除一個固定的值)後所得到的字元進行比較。相等即認為通訊無錯誤,不相等則認為通訊出錯。

七、MD5校驗

1. 定義

MD5的實際應用是對一段Message(位元組串)產生fingerprint(指紋),可以防止被篡改。