1. 程式人生 > >數據校驗碼概述

數據校驗碼概述

相加 gop 都是 作用 異或 並且 所有 排列 big

[TOC]

奇偶校驗碼

最簡單實用的一種校驗數據的方式。在原始數據的後面加一個校驗位來實現數據的校對。

若原始數據為:\(D=(D_1,D_2...D_n)?\)

偶校驗:$D_偶 = D_1 \bigoplus D_2 \bigoplus...D_n $

奇校驗:\(D_奇 = \overline{ D_1 \bigoplus D_2 \bigoplus...D_n }\)

驗算時:

\(F = \overline{D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_奇}\)

\(F = D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_偶\)

如果 \(F\) 的值為 0 ,則傳輸正確,否則錯誤

奇偶校驗碼只能檢查一位錯,並且無法糾錯

海明檢驗碼

若一共有 k 個數據位,則需要 r個檢驗位來完成一位糾錯,兩位檢錯。

$ 2^{r-1} \geq k + r$

新生成的數據為 k+r位,其中每個校驗位放在2的冪次方的位置上

其值為原始數據位在新的排列後,其位次的二進制中有對應位的數的異或和

最後一個校驗位的值是前面所有位的異或和,其作用是判斷是一位錯還是兩位錯

當接收方接收數據後。先看最後一位,若是1則代表一位錯。具體位置由各個位置的海明碼組成的二進制表示。

若是0,則若是其他位校驗碼都是0表示傳輸正確,否則就是兩位錯。

CRC循環校驗碼

前置技能:模2除法

傳輸前雙方約定好一個二進制串,設長度為r,要求最高位和最低位的值必須為1

先將原始數據右移r-1位,低位補0。

然後將這個數除之前的二進制串,得到的余數和之前處理好的數據相加。得到校驗碼。

PS.這個余數一定是要r-1位的,若不夠則高位補0

數據校驗碼概述