CRC(CyclicRedundancyCheck)循環冗餘校驗碼是常用的校驗碼,由兩部分組成,前部分是信息碼,後部分是校驗碼。
基本介紹
- 中文名:循環冗餘校驗
- 外文名:CRC
- 全名:Cyclic Redundancy Check
CRC(Cyclic Redundancy Check)循環冗餘校驗碼
是常用的校驗碼,在早期的通信中運用廣泛,因為早期的通信技術不夠可靠(不可靠性的來源是通信技術決定的,比如電磁波通信時受雷電等因素的影響),不可靠的通信就會帶來‘確認信息’的困惑,書上提到紅軍和藍軍通信聯合進攻山下的敵軍的例子,第一天紅軍發了條信息要藍軍第二天一起進攻,藍軍收到之後,發一條確認信息,但是藍軍擔心的是‘確認信息’如果也不可靠而沒有成功到達紅軍那裡,那自己不是很危險?於是紅軍再發一條‘對確認的確認信息’,但同樣的問題還是不能解決,紅軍仍然不敢冒然行動。
對通信的可靠性檢查就需要‘校驗’,校驗是從數據本身進行檢查,它依靠某種數學上約定的形式進行檢查,校驗的結果是可靠或不可靠,如果可靠就對數據進行處理,如果不可靠,就丟棄重發或者進行修復。
CRC碼是由兩部分組成,前部分是信息碼,就是需要校驗的信息,後部分是校驗碼,如果CRC碼共長n個bit,信息碼長k個bit,就稱為(n,k)碼。 它的編碼規則是:
1、首先將原信息碼(kbit)左移r位(k+r=n)
2、運用一個生成多項式g(x)(也可看成二進制數)用模2除上面的式子,得到的餘數就是校驗碼。
非常簡單,要說明的:模2除就是在除的過程中用模2加,模2加實際上就是我們熟悉的異或運算,就是加法不考慮進位,公式是:
0+0=1+1=0,1+0=0+1=1
即‘異’則真,‘非異’則假。
由此得到定理:a+b+b=a 也就是‘模2減’和‘模2加’直值表完全相同。
有了加減法就可以用來定義模2除法,於是就可以用生成多項式g(x)生成CRC校驗碼。
例如: g(x)=x4+x3+x2+1,(7,3)碼,信息碼110產生的CRC碼就是:
101
11101 | 110,0000
111 01
1 0100
1 1101
1001
餘數是1001,所以CRC碼是110,1001
標準的CRC碼是,CRC-CCITT和CRC-16,它們的生成多項式是:
CRC-CCITT=x16+x12+x5+1
CRC-16=x16+x15+x2+1