演算法 迴圈冗餘校驗(CRC)

2021-09-27 03:51:12 字數 933 閱讀 9278

迴圈冗餘校驗(cyclic redundancy check, crc)是一種根據網路資料報或電腦檔案等資料產生簡短固定位數校驗碼的一種雜湊函式,主要用來檢測或校驗資料傳輸或者儲存後可能出現的錯誤。它是利用除法及餘數的原理來作錯誤偵測的。

工作原理

在對資訊的處理過程中,我們可以將要被處理的資料塊m看成乙個n階的二進位制多項式

crc校驗就是基於這種多項式進行的運算,以gf(2)(the integers modulo 2)多項式算術為數學基礎,即(模-2)除法的餘數運算,使用的除數不同,crc的型別也就不一樣。crc傳輸實際上就是在長度為 k 的資料後面新增供差錯檢測(frame check sequence) 用的 r 位冗餘碼(redundant code 沒錯crc裡面的r就是這個),使原資料構成 n = k + r 位並傳送出去, 此方式又叫(n, k)碼。可以證明存在乙個最高次冪為n-k=r的多項式g(x), 根據g(x)可以生成k位資訊的校驗碼,而 g(x) 叫做這個crc碼的生成多項式( poly )。

實踐案例

1、先確定您要使用的crc校驗形式,以此確定對應除數(用g來表示)和選定階數(用r來表示)。(如果選擇crc-4的話,r就等於4,選擇crc-16話,r就等於16,以此類推。)

2、在待處理的資料塊m』後附加上r個0。假設原始資料塊的長度是m位的話,附加之後的長度就變成m+r位了,我們用m來代表附加後的值。

3、用第一步選擇的生成多項式的值(即對應除數g)來除第二步附加0後生成的值(m),迴圈計算,一直到餘數的階數小於等於r-1,這時所得到的餘數(用y表示)就是原始資料

迴圈冗餘校驗CRC演算法

本文參考自 crc校驗 迴圈冗餘校驗 是資料通訊中最常採用的校驗方式。在嵌入式軟體開發中,經常要用到crc 演算法對各種資料進行校驗。因此,掌握基本的crc演算法應是嵌入式程式設計師的基本技能。其實,在網上有一篇介紹crc 演算法的非常好的文章,作者是ross williams,題目叫 a pain...

迴圈冗餘校驗 CRC校驗

一 crc校驗概念 即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資料傳輸的正確性和完整性。其特徵是資訊字段和...

迴圈冗餘校驗CRC

網上搜到的內容不全面,維基百科講的比較好,原理很清楚傳送門 其實對於程式設計師來講,不用太在意它的數學原理,另外生成碼的選擇不是隨意的,這可能影響到校驗的效能。注意其中的加法不進製,減法不借位,類似是異或邏輯。關於怎樣產生crc,有這樣乙個演算法 下面為crc的計算過程 1 設定crc暫存器,並給其...