CRC的校驗原理
一、基本原理
CRC檢驗原理實際上就是在一個p位二進位制資料序列之後附加一個r位二進位制檢驗碼(序列),從而構成一個總長為n=p+r位的二進位制序列;附加在資料序列之後的這個檢驗碼與資料序列的內容之間存在著某種特定的關係。如果因干擾等原因使資料序列中的某一位或某些位發生錯誤,這種特定關係就會被破壞。因此,通過檢查這一關係,就可以實現對資料正確性的檢驗。
二、幾個基本概念
1、幀檢驗序列FCS(Frame Check Sequence):為了進行差錯檢驗而新增的冗餘碼。
2、多項式模2執行:實際上是按位異或(Exclusive OR)運算,即相同為0,相異為1,也就是不考慮進位、借位的二進位制加減運算。如:10011011 + 11001010 = 01010001。
3、生成多項式(generator polynomial):當進行CRC檢驗時,傳送方與接收方需要事先約定一個除數,即生成多項式,一般記作G(x)。生成多項式的最高位與最低位必須是1。常用的CRC碼的生成多項式有:
CRC8=X8+X5+X4+1
CRC-CCITT=X16+X12+X5+1
CRC16=X16+X15+X5+1
CRC12=X12+X11+X3+X2+1
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1
每一個生成多項式都可以與一個程式碼相對應,如CRC8對應程式碼:100110001。
三、CRC檢驗碼的計算
設資訊欄位為K位,校驗欄位為R位,則碼字長度為N(N=K+R)。設雙方事先約定了一個R次多項式g(x),則CRC碼:
V(x)=A(x)g(x)=xRm(x)+r(x)
其中: m(x)為K次資訊多項式, r(x)為R-1次校驗多項式。
這裡r(x)對應的程式碼即為冗餘碼,加在原資訊欄位後即形成CRC碼。
r(x)的計算方法為:在K位資訊欄位的後面新增R個0,再除以g(x)對應的程式碼序列,得到的餘數即為r(x)對應的程式碼(應為R-1位;若不足,而在高位補0)。
計算示例
設需要傳送的資訊為M = 1010001101,產生多項式對應的程式碼為P = 110101,R=5。在M後加5個0,然後對P做模2除法運算,得餘數r(x)對應的程式碼:01110。故實際需要傳送的資料是101000110101110。
四、錯誤檢測
當接收方收到資料後,用收到的資料對P(事先約定的)進行模2除法,若餘數為0,則認為資料傳輸無差錯;若餘數不為0,則認為資料傳輸出現了錯誤,由於不知道錯誤發生在什麼地方,因而不能進行自動糾正,一般的做法是丟棄接收的資料。
五、幾點說明:
1、CRC是一種常用的檢錯碼,並不能用於自動糾錯。
2、只要經過嚴格的挑選,並使用位數足夠多的除數 P,那麼出現檢測不到的差錯的概率就很小很小。
3、僅用迴圈冗餘檢驗 CRC 差錯檢測技術只能做到無差錯接受(只是非常近似的認為是無差錯的),並不能保證可靠傳輸。
轉自http://blog.163.com/du_minchao@126/blog/static/107495394201075114028606/
相關文章
- CRC校驗原理
- CRC校驗查表法原理及實現(CRC-16)
- CRC校驗原理簡介及C程式碼實現說明C程式
- CRC-32 校驗演算法演算法
- 求助:EXCEL,VB,實現 CRC16 校驗Excel
- 在ossphpsdk進行crc64校驗PHP
- 【CRC校驗方法】+【FPGA實現(傳送端)】FPGA
- CRC冗餘校驗碼的介紹和實現
- USB中TOKEN的CRC5與CRC16校驗(神奇的工具生成Verilog實現)
- CRC(迴圈冗餘校驗)和CBC(密碼塊鏈)密碼
- 基於crc32實現的記憶體的程式碼校驗記憶體
- CRC原理及實現
- 解除CacheX for Internet Explorer V 4.00的crc校驗及破解 (19千字)
- 常見的校驗演算法crc(32),md5(128),sha1(160)演算法
- 海明校驗碼檢錯和糾錯的工作原理
- CRC演算法原理、推導及實現演算法
- springMVC:校驗框架:多規則校驗,巢狀校驗,分組校驗;ssm整合技術SpringMVC框架巢狀SSM
- 痞子衡嵌入式:在IAR開發環境下為工程開啟CRC完整性校驗功能的方法開發環境
- DL 451-1991 迴圈式遠動規約(CDT)CRC8校驗碼演算法演算法
- 行式填報 資料校驗 --- 小計校驗
- vxe-table 校驗,根據行屬性校驗
- 分組校驗
- 資料校驗
- 資料鏈路層迴圈冗餘(CRC)檢驗
- DW中的資料校驗
- CRC簡介
- 前端資料校驗後,後端介面是否需要再次校驗?前端後端
- SpringBoot分組校驗及自定義校驗註解Spring Boot
- JS 校驗非法字串JS字串
- eslint 校驗去除EsLint
- easypoi資料校驗
- 汽車車牌校驗
- 淺談奇偶校驗
- AOP 無感校驗
- linux下檔案的校驗Linux
- TCP的校驗和與編號TCP
- 大二上,計組原理筆記(3)2.6資料校驗碼筆記
- MySQL手動資料校驗+雲資料庫資料校驗MySql資料庫