CRC校驗原理(cyclic redundancy check)
阿新 • • 發佈:2019-02-07
1、CRC基於“模二運算”。
模二運算類似於普通二進位制運算,但是區別在於無進位和借位。
例如:
加法:010+110=100
減法:010-110=100
無進位和借位使得模二運算的加減法相當於異或操作。
乘法:
1010
* 101
————
1010
0000
1010
————
100010
除法:
看的出來,模二運算的乘除也和普通二進位制的乘除類似,唯一差別就是無進位借位(除法樣例中的餘數前面多的那個0可以不用管,看了下面就知道了)
2、CRC校驗流程
1)選定一個除數(術語叫生成多項式),假設這個除數二進位制為k位。
2)原碼左移k-1位得到一個新碼,比如原碼1001,k為4,那麼移位後就變成1001000。
3)新碼模二除以這個除數,得到一個k-1位的餘數(校驗碼)。如果餘數不滿k-1位,就手動在前面用0補滿,比如如果餘1,那就補成001。
4)把新碼加上這個校驗碼得到CRC碼,比如按以上樣例,最終的CRC碼就是1001001。
5)傳送
6)接收之後用這個CRC碼除以之前選擇的除數,餘數為0則傳輸沒有出錯。否則根據餘數和生成多項式的一些運算(書上寫的簡直一堆crap,看不懂),可以得到出錯位。
(圖片來自http://blog.csdn.net/lycb_gz/article/details/8201987)