From Wiki-Cyclic redundancy check
A cyclic redundancy check (CRC) is an error-detecting code commonly used in digital networks and storage devices to detect accidental changes to raw data. Blocks of data entering these systems get a short check value attached, based on the remainder of a polynomial division of their contents. On retrieval, the calculation is repeated and, in the event the check values do not match, corrective action can be taken against data corruption.
From 循環(huán)冗余校驗CRC簡介
- CRC為校驗和的一種,是兩個字節(jié)數據流采用二進制除法(沒有借位和進位猜丹,使用異或來代替減法)相除所得到的余數猴誊。
- 其中被除數是需要計算校驗和的信息數據流的二進制表示应结;除數是一個長度為(n+1)的預定義二進制數摹迷,通常用多項式的系數來表示误债。
- 在做除法之前娃圆,要在信息數據之后先加上n個0陷遮。冗余碼的位數是n位。冗余碼的計算方法是重挑,先將信息碼后面補0迫肖,補0的個數是生成多項式最高次冪;將補零之后的信息碼用模二除法(非二進制除法)除以G(X)對應的2進制碼攒驰,注意除法過程中所用的減法是模2減法(注意是高位對齊)蟆湖,即沒有借位的減法,也就是異或運算玻粪。
- 當被除數逐位除完時隅津,得到比除數少一位的余數。此余數即為冗余位,將其添加在信息位后便構成CRC碼字劲室。
例如伦仍,假設信息碼字為11100011,生成多項式G(X)=X5+X4+X+1很洋,計算CRC碼字充蓝。G(X) = X5+X4+X+1,也就是110011,因為最高次是5喉磁,所以谓苟,在信息碼字后補5個0,變?yōu)?110001100000协怒。
用1110001100000模二除法除以110011涝焙,余數為11010,即為所求的冗余位孕暇。因此發(fā)送出去的CRC碼字為原始碼字11100011末尾加上冗余位11010仑撞,即 1110001111010。
接收端收到碼字后妖滔,采用同樣的方法驗證隧哮,即將收到的碼字用模二除法除以110011(是G(X)對應的二進制生成碼),發(fā)現余數是0座舍,則認為碼字在傳輸過程中沒有出錯沮翔。
盡管在錯誤檢測中非常有用,CRC并不能可靠地校驗數據完整性(即數據沒有發(fā)生任何變化)簸州,這是因為CRC多項式是線性結構鉴竭,可以非常容易地故意改變量據而維持CRC不變歧譬。