1. 程式人生 > >【直觀對比】奇偶校驗 累加和校驗 CRC校驗

【直觀對比】奇偶校驗 累加和校驗 CRC校驗

奇偶校驗:

所謂通訊過程的校驗是指在通訊資料後加上一些附加資訊,通過這些附加資訊來判斷接收到的資料是否和傳送出的資料相同。比如說RS232

序列通訊可以設定奇偶校驗位,所謂奇偶校驗就是在傳送的每一個位元組後都加上一位,使得每個位元組中1的個數為奇數個或偶數個。比如我們要

傳送的位元組是0x1a,二進位制表示為0001 1010。

採用奇校驗,則在資料後補上個0,資料變為0001 1010 0,資料中1的個數為奇數個(3個)

採用偶校驗,則在資料後補上個1,資料變為0001 1010 1,資料中1的個數為偶數個(4個)

接收方通過計算資料中1個數是否滿足奇偶性來確定資料是否有錯。(這種方式的正確率不高,一旦發生偶數個位元位錯誤就無法檢測出來

累加和校驗:

另一種常見的校驗方式是累加和校驗。所謂累加和校驗實現方式有很多種,最常用的一種是在一次通訊資料包的最後加入一個位元組的校驗數

據。這個位元組內容為前面資料包中全部資料的忽略進位的按位元組累加和。比如下面的例子:

我們要傳輸的資訊為: 6、23、4

加上校驗和後的資料包:6、23、4、33

這裡 33 為前三個位元組的校驗和。接收方收到全部資料後對前三個資料進行同樣的累加計算,如果累加和與最後一個位元組相同的話就認為傳輸的資料沒有錯誤。

累加和校驗由於實現起來非常簡單,也被廣泛的採用。但是這種校驗方式的檢錯能力也比較一般,對於單位元組的校驗和大概有1/256 的概率將

原本是錯誤的通訊資料誤判為正確資料。之所以這裡介紹這種校驗,是因為CRC校驗在傳輸資料的形式上與累加和校驗是相同的,都可以表示

為:通訊資料 校驗位元組(也可能是多個位元組)

CRC校驗:

CRC 演算法的基本思想是將傳輸的資料當做一個位數很長的數。將這個數除以另一個數。得到的餘數作為校驗資料附加到原資料後面。還以上

面例子中的資料為例:

  1. 1、將X的最高次冪為R的生成多項式G(X)轉換成對應的R+1位二進位制數。  
  2. 2、將資訊碼左移R位,相當於對應的資訊多項式C(X)*2R。  
  3. 3、用生成多項式(二進位制數)對資訊碼做除,得到R位的餘數(注意:這裡的二進位制做除法得到的餘數其實是模2除法得到的餘數,並不等於其對應十進位制數做除法得到的餘數。)。  
  4. 4、將餘數拼到資訊碼左移後空出的位置,得到完整的CRC碼。  
  5. 【例】假設使用的生成多項式是G(X)=X3+X+1。4位的原始報文為1010,求編碼後的報文。  
  6. 解:  
  7. 1、將生成多項式G(X)=X3+X+1轉換成對應的二進位制除數1011。  
  8. 2、此題生成多項式有4位(R+1)(注意:4位的生成多項式計算所得的校驗碼為3位,R為校驗碼位數),要把原始報文C(X)左移3(R)位變成1010000  
  9. 3、用生成多項式對應的二進位制數對左移3位後的原始報文進行模2除(高位對齊),相當於按位異或:  
  10. 1010000  
  11. 1011  
  12. ------------------  
  13. 0001000  
  14. 1011  
  15. ------------------  
  16. 0011  
  17. 得到的餘位011,所以最終編碼為:1010011