CRC-32在線校驗網址:(以下都可以)
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
https://www.lammertbies.nl/comm/info/crc-calculation.html
CRC即循環冗余校驗(Cyclic Redundancy Check),CRC是一種常用的檢錯碼,並不能用於自動糾錯
CRC碼校驗原理:
發送端:發送端根據信息字段與生成多項式生產呢個CRC碼,CRC碼作為數據發送給接收端,同時也會把計算出的校驗字段的數據一同發送(注:目的是如果接受端檢測到發送的數據是正確的,接收端能夠從CRC碼中提取出信息字段的數據)。
接收端:接收到CRC碼數據后,檢測接收到的數據是否正確,方法:將CRC碼數據與生成多項式進行模2除,如果余數為0,則說明接收到的數據是正確的。然后,從CRC碼中提取出信息字段的數據。
發送端生成CRC碼方法:
CRC碼是由兩部分組成的,前部分是信息字段,就是需要校驗的信息,后部分是校驗字段,如果CRC碼共長n個bit,信息字段長k個bit,就稱為(n,k)碼。它的編碼規則是:
- 首先將信息字段值(k bit)左移r位(k+r=n)
- 運用一個生成多項式g(x) (也可看成二進制數) 模2,除上面的式子,得到的余數就是校驗字段值。模2運算實際上是按位異或(Exclusive OR)運算,即相同為0,相異為1,也就是不考慮進位、借位的二進制加減運算。
- 生成的CRC碼值為:信息字段值+校驗字段值(單位:位bit,次序:高位到低位),例如字段值為1001,校驗字段值為110,則CRC碼為1001110
常見的多項式:
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
下面是看起來復雜,其實就是套公式的數學公式計算方法:
設待校驗的信息碼有k位,即:m = (mk-1、mk-2、mk-3……m1、m0), 多項式m(x)可表示為
m(x) = mk-1xk-1+ mk-2xk-2 +……m1x1+ m0x0 ----------------------------------------------------------------- 式(1)
用多項式g(x)的最高次冪R對應的XR 乘以m(x),將得到式(2)
XR m(x) = mk-1xk+R-1+ mk-2xk+R-2 +……m1x1+R+ m0x0+R -----------------------------------------------------式(2)
將XR m(x) 模2除以g(x),得到多項式商為A(x),余數為r(x),即:
A(x)g(x) = XR m(x) +r(x) ------------------------------------------------------------------------------------------式(3)
余數多項式r(x)可表示為
r(x) = rR-1xR-1+ rR-2xR-2 +……r1x1+ r0x0 ------------------------------------------------------------------------式(4)
將式(2)和式(4)代入式(3)得
A(x)g(x) = mk-1xk+R-1+ mk-2xk+R-2 +……m1x1+R+ m0x0+R + rR-1xR-1+ rR-2xR-2 +……r1x1+ r0x0 ---------式(5)
式(5)對應的碼組為K+R位,即:
N = (mk-1+ mk-2 +……m1+ m0 + rR-1+ rR-2 +……r1+ r0) ------------------------------------------------------式(6)
從M到N就是CRC的編碼過程mk-1+ mk-2 +……m1+ m0 為K位信息碼;rR-1+ rR-2 +……r1+ r0為R位校驗碼。
信息接收端,將接受到的K+R位碼除以相同的多項式g(x),根據式(3)所產生的余數為0,則接受到的數據信息正確無誤,否則則認為信息在傳輸過程中產生的誤碼。
根據式(1)~式(6),CRC編碼必須進行模2除運算,CRC的校驗位就是模2除得到的余數,如果余數用寄存器的存數表示,模2除用異或門表示,那么通用的CRC串行電路就可以同圖6.2所示的電路來實現。
參考:https://blog.csdn.net/u013898698/article/details/78864161
https://blog.csdn.net/android_mnbvcxz/article/details/78902737