1.奇偶校驗法:
奇校驗,數值部分各個位上數的和與校驗位的和應是一個奇數,即,1的個數為奇數個,包括校驗位。常用於同步傳輸。
偶校驗,包括校驗位有偶數個1,常用於異步傳輸或低速傳輸。
通常是在每個字節后增加一個附加位(奇偶校驗位),即每個字節發送九位數據。
缺點,數位的錯誤以及偶數個位的錯誤檢測不出來,無法定位錯誤。
例:
2.循環冗余校驗法:
循環冗余(CRC)檢驗:數據M后面添加供差錯檢驗用的n位冗余碼,然后構成一個幀發送出去,一共發送(k+n)位。【模2運算求n:M÷P=Q…R,n即R】,校驗時除以P(模2運算),余數R為0,則接受,不為0,則判定這個幀有差錯。
具體:
在發送端,先把數據划分為組,假定每個組k個比特。現假定待傳送的數據M=101001(k=6)。CRC運算就是在數據M后面添加供差錯檢驗用的n位冗余碼,然后構成一個幀發送出去,一共發送(k+n)位。在要發送的數據后面加n位的冗余碼,雖然增加了數據傳送的開銷,但卻可以進行差錯檢測。
這n位冗余碼可以通過下面的方法得出。用二進制的模2運算進行2^n乘M的運算,即在M后面添加n個0。得到k+n位的數除以收發雙方事先商定的長度為(n+1)位的除數p(p也可叫做生成多項式G,沒固定),得出商是Q,余數是R(n位,比p少一位)。
例:
M=101001(k=6),假定除數p=1101(n=3,n比除數p少一位,即n為3位).經模2除法運算(實際上是除數和被除數做異或運算)后的結果是:商Q=110101(這個商並沒有什么用),而余數R=001,這個余數R就作為冗余碼拼接在M之后發送出去,這種為了進行檢錯而添加的冗余碼常稱為幀檢驗序列FCS,因此加上FCS后發送的幀是101001001(一共K+n位)。
在接收端把接收到的數據以幀為單位進行CRC檢驗:把收到的每一幀都除以同樣的除數P(模2除法),然后檢查得到的余數R。
如果在傳輸過程中無差錯,那么經過CRC檢驗后得出的余數R肯定是0。
但如果出現誤碼,那么余數R仍等於0的概率是非常小的。
總結:
(1)若得出的余數R=0,則判定這個幀沒錯,就接受。
(2)若余數R!=0;則判定這個幀有差錯(但無法確定是哪一位或者或者哪幾位出現了差錯),就丟棄。
再例如:
備注:
模2運算:一種二進制算法,CRC校驗技術中的核心部分。與四則運算相同,模2運算也包括模2加、模2減、模2乘、模2除四種二進制運算。
與四則運算不同的是模2運算不考慮進位和借位(等同於“異或”運算),即模2加法是不帶進位的二進制加法運算,模2減法是不帶借位的二進制減法運算。
例:

3.海明碼:
設數據有n位,校驗碼有x位。則校驗碼一共有2x種取值方式。其中需要一種取值方式表示數據正確,剩下2x-1種取值方式表示有一位數據出錯。因為編碼后的二進制串有n+x位,因此x應該滿足 2x-1 ≥ n+x (備注:http://www.cnblogs.com/lesroad/p/8688634.html)