CRC(循�(huán)冗余校驗)是一種根�(jù)�(wǎng)�(luò)�(shù)�(jù)封包�電腦檔案等數(shù)�(jù)�(chǎn)生簡短固定位�(shù)校驗碼的一種散列函�(shù),主要用來檢測或校驗�(shù)�(jù)傳輸或者保存后可能出現(xiàn)的錯�。生成的�(shù)字在傳輸或者儲存之前計算出來并且附加到�(shù)�(jù)后面,然后接收方�(jìn)行檢驗確定數(shù)�(jù)是否�(fā)生變�。一般來說,循環(huán)冗余校驗的值都�32位的整數(shù)。由于本函數(shù)易于用二�(jìn)制的電腦硬件使用、容易�(jìn)行數(shù)�(xué)分析并且尤其善于檢測傳輸通道干擾引起的錯�,因此獲得廣泛應(yīng)��
基本原理:在K位信息碼后再拼接R位的校驗�,整個編碼長度為N�,因�,這種編碼又叫(N,K)碼。對于一個給定的(N,K)碼,可以證明存在一個次冪為N-K=R的多項式G(x)。根�(jù)G(x)可以生成K位信息的校驗�,而G(x)叫做這�CRC碼的生成多項��
校驗碼的具體生成過程為:假設(shè)�(fā)送信息用信息多項式C(X)表示,將C(x)左移R�,則可表示成C(x)*2R,這樣C(x)的右邊就會空出R�,這就是校驗碼的位�。通過C(x)*2R除以生成多項式G(x)得到的余�(shù)就是校驗��
在國際標(biāo)�(zhǔn)�,根�(jù)生成多項式G(x)的不同,CRC又可分為以下幾種�(biāo)�(zhǔn)�
?、貱RC-12�: G(x)=X12+X11+X3+X2+X+1
②CRC-16�: G(x)=X16+X15+X2+1
?、跜RC-CCITT�: G(x)=X16+X12+X5+1
④CRC-32�: G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X+1
CRC-12碼通常用來傳�6-bit字符�。CRC-16及CRC-CCITT碼則用是來傳�8-bit字符,其中CRC-16為美國采用,而CRC-CCITT為歐洲國家所采用。CRC-32碼大都被采用在一種稱為Point-to-Point的同步傳輸中。下面以最常用的CRC-16為例來說明其生成過程�
CRC-16碼由兩個字節(jié)�(gòu)�,在開始時CRC寄存器的每一位都�(yù)置為1,然后把CRC寄存器與8-bit的數(shù)�(jù)�(jìn)行異�,之后對CRC寄存器從高到低�(jìn)行移位,在位(MSB)的位置�(bǔ)�,而位(LSB,移位后已經(jīng)被移出CRC寄存器)如果�1,則把寄存器與預(yù)定義的多項式碼�(jìn)行異�,否則如果LSB為零,則無需�(jìn)行異�。重�(fù)上述的由高至低的移位8�,�8-bit�(shù)�(jù)處理完畢,用此時CRC寄存器的值與下一�8-bit�(shù)�(jù)異或并�(jìn)行如前一個數(shù)�(jù)似的8次移�。所有的字符處理完成后CRC寄存器內(nèi)的值即為最終的CRC��
1.設(shè)置CRC寄存�,并給其賦值FFFF(hex)�
2.將�(shù)�(jù)的�8-bit字符�16位CRC寄存器的�8位�(jìn)行異�,并把結(jié)果存入CRC寄存器�
3.CRC寄存器向右移一�,MSB�(bǔ)零,移出并檢查LSB�
4.如果LSB�0,重�(fù)第三�;若LSB�1,CRC寄存器與多項式碼相異��
5.重�(fù)�3與第4步直�8次移位全部完�。此時一�8-bit�(shù)�(jù)處理完畢�
6.重�(fù)�2至第5步直到所有數(shù)�(jù)全部處理完成�
7.最終CRC寄存器的�(nèi)容即為CRC值�
1、將x的冪次為R的生成多項式G(x)�(zhuǎn)換成對應(yīng)的R+1位二�(jìn)制數(shù)�
2、將信息碼左移R�,相�(dāng)與對�(yīng)的信息多項式C(x)*2R�
3、用生成多項式(二�(jìn)制數(shù))對信息碼做�2�,得到R位的余數(shù)�
4、將余數(shù)拼到信息碼左移后空出的位置,得到完整的CRC��
維庫電子�,電子知�,一查百��
已收錄詞�153979�