1. 程式人生 > >【校驗碼】資料校驗碼

【校驗碼】資料校驗碼

計算機系統在進行資料的傳輸和儲存時,難免會發生錯誤。為了避免這種錯誤,一方面是從硬體的方面著手,提高硬體的抗干擾能力和可靠性;而另一方面在資料編碼上採取編碼糾碼的措施,使得機器能夠自己發現錯誤甚至糾正錯誤,我們把這種具有檢測錯誤或帶有自動糾錯能力的資料編碼稱為資料校驗碼。其原理是在資料中加入一些校驗位,組成資料校驗碼,通過檢查資料校驗碼的合法性來判斷是否出錯或進行糾錯。常用的資料校驗碼有奇偶校驗碼、海明校驗碼和迴圈冗餘校驗碼(CRC)等。

1、奇偶校驗碼

奇偶校驗碼是最簡單、最常使用的編解碼,能發現程式碼中一位的出錯情況的編碼,常用語儲存器讀寫檢查。

原理對於n 位二進位制數D=dn-1dn-2

d1d0,新增一位校驗位PP 的位置可以在資料D 的最高位dn-1 之前,也可以在資料D 的最低位d0 之後,並且,P 是資料D 的函式,即P=.D)。於是,n 位資料D 1 位校驗位P 便構成了一個n+1 位的奇偶校驗碼。奇偶校驗碼根據PD 之間的函式不同,可分為奇校驗和偶校驗。
偶校驗(Even):加入一位校驗位PEven 後,使得n+1 位的奇偶校驗碼中“1”的個數為
偶數,因此,PEven=dn-1dn-2⊕…d1d0
奇校驗(Odd):加入一位校驗位POdd 後,使得n+1 位的奇偶校驗碼中“1”的個數為奇
數,因此,POdd= Even P

1)奇偶校驗碼的糾錯能力
根據奇偶校驗碼的校驗可知,奇偶校驗碼只能發現一位出錯或奇數位同時出錯,至於出
錯的位置是無法確定的,因此,奇偶校驗碼無法實現糾錯功能。儘管如此,由於一位出錯的
概率遠遠高於多位同時出錯的概率,奇偶校驗碼能夠滿足一般可靠性的要求,因此,奇偶校
驗碼一種最簡單、最常用的資料校驗碼,它被廣泛應用於對儲存器中資料的檢查或傳送資料
的檢查。

2)迴圈冗餘校驗碼(CRC

CRC校驗碼發現並糾正資訊儲存或傳送過程中連續出現的多位錯誤,因此在磁介質儲存和計算機之間通訊方面得到廣泛應用。

生成CRC碼:

n 位資料dn-1d1d0 所構成一個χ的n-1 次冪的多項式M(χ),即M(χ)= dn-1χn-1+dn-2χn-2++d1χ1+d0,約定一個生成多項式G(χ)為χ的k 次冪的多項式,即G(χ)= Ckχk+Ck-1χk-1++C1χ1+C0G(χ)作為除數的餘數多項式R(χ)最高次冪為χk-1,因此R(χ)相當於k 位餘數形成的多項式。把k 位餘數拼接在n 位資料位之後,便構成nk位的CRC 碼。CRC 碼的編碼只是簡單地拼接,關鍵是如何根據資料去產生

k 位餘數。由於n 位資料位後附加了k 位餘數,n 位資料所構成一個χ的n-1 次冪的多項式M(χ)。

CRC碼是用多項式M(x)*xr除以稱為G(x)(產生校驗的多項式又稱為生成多項式)所得餘數作為校驗位的(模2運算)。為了得到r位餘數(校驗位),G(x)必須是r+1位。

根據模2 加減運算規則可得:M(χ)·χk-1+R(χ)=Q(χ)×G(χ)

【例】設生成多項式G(χ)=χ3+χ1+1,求4 位資料1101 CRC 碼。
解:G(χ)=χ3+χ1+1,是4 位的多項式
∴餘數是3
根據式(2-16)可得3 位的餘數為101,因此,4 位資料1101 CRC 碼為1101101

CRC碼的校驗接收端收到CRC 碼後,用雙方約定的生成多項式G(χ)做模2 除,如果除得的餘數0,則表示接收到的資訊中沒有錯誤,否則,則表示接收到的資訊中某一位發生錯誤。出錯的位置不同相應的餘數也不同,因此,可以根據餘數來確定出錯的位置,進而實現糾錯功能。

2、海明校驗碼

海明校驗碼是由Richard Hamming 1950 年提出的,到目前還被廣泛應用。它是在
奇偶校驗的基礎上,通過合理增加校驗位的位數,組成海明校驗碼,不僅能夠實現發現多位出錯,而且能夠對一位出錯進行自動糾正。

1)海明校驗碼中校驗位的位數

步驟一
設資料的位數為n,校驗位的位數為k,則組成的海明校驗碼為n+k 位。校驗時k 位校驗位的編碼共有2k 種狀態,其中只有一種狀態用來表示資料無誤,其餘2k -1 種狀態用來表示資料有措。由於海明校驗碼共n+k 位,所以校驗位的位數k 與資料的位數n 應滿足:2k -1n+k 

由此公式可由的欲檢測的二進位制程式碼位數n求得相應的所需的校驗位數k;

步驟二:求被送程式碼(有效資訊)所在的位置

n+k位程式碼自左至右依次編碼為第1,2,3,.,n+k;k位檢測位記作Ci (i=1,2,4,8)分別安插在n+k位程式碼編號的第1,2,4,82k-1;

步驟三:求每個校驗位所負責資訊位並對其分組

檢測位和它所負責的小組中的1的個數為奇數或為偶數,具體分配如下:

C1  檢測的g1小組包含1,3,5,7,9,11,…位.

C2  檢測的g2小組包含2,3,6,7,10,11,14,15,…位.

C4  檢測的g3小組包含4, 5,6,7, 12,13,14,15,…位

C8  檢測的g4小組包含8,9,10, 11,12,13,14,15,24…位.

其餘檢測位的小組所包含的小組所包含的位也可類推。這種小組的劃分有如下特點:

1每個小組gi有一位且僅有一位為它所獨佔,這一位是其他小組所沒有的,即gi小組獨佔第2i-1(i=1,2,3,) .

2每兩個小組gigj共同佔有一位是其他小組所沒有的,即每兩小組gigj共同佔有2i-1 +2j-1(i,j=1,2,3,) .

依次類推,便可確定每組所包含的各位.

步驟四:根據配偶原則來配置海明碼

對各組檢測位的值等於其所負責的組中的位進行異或運算所得.

海明碼的糾錯過程:

海明碼的糾錯過程實際上是對傳送後的海明碼形成新的檢測位pii=1,2,4,8,.,根據pi的狀態,便可直接指出錯誤的位置。Pi的狀態是由原檢測位Ci及所在小組內”1”的個數確定的。

四 bcc異域校驗碼

實現原理:很多基於串列埠的通訊都用這種既簡單又相當準確的方法。它就是把所有資料都和一個指定的初始值(通常是0)異或一次,最後的結果就是校驗值

實現方法:通常把她附在通訊資料的最後一起傳送出去。接收方收到資料後自己也計算一次異或和校驗值,如果和收到的校驗值一致就說明收到的資料是完整的。

適用範圍:適用於大多數要求不高的資料通訊。

應用例子:ic卡介面通訊、很多微控制器系統的串列埠通訊都使用。

 MD5

MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的電腦科學實驗室和RSA Data Security Inc發明,由MD2/MD3/MD4發展而來的。MD5的實際應用是對一段Message(位元組串)產生fingerprint(指紋),可以防止被“篡改”。

實現原理:

用特定的演算法對資料進行處理得到密文,當用戶輸入明文,通過用相同演算法對明文進行處理,看是否匹配,若匹配則所傳輸的資料正確,否則錯誤;

實現方法:

主要有md5des演算法。

適用範圍:

資料比較大或要求比較高的場合。如md5用於大量資料、檔案校驗,des用於保

     密資料的校驗(數字簽名)等等。

應用例子:檔案校驗、銀行系統的交易資料。



相關推薦

資料

計算機系統在進行資料的傳輸和儲存時,難免會發生錯誤。為了避免這種錯誤,一方面是從硬體的方面著手,提高硬體的抗干擾能力和可靠性;而另一方面在資料編碼上採取編碼糾碼的措施,使得機器能夠自己發現錯誤甚至糾正錯誤,我們把這種具有檢測錯誤或帶有自動糾錯能力的資料編碼稱為資料校驗碼。其

bzoj 5127資料(亂搞)

傳送門biu~ 可以發現,如果區間[l,r]滿足條件,那麼它的長度為2的子區間一定滿足條件;如果所有長度為2的子區間滿足條件,那麼這個區間也一定滿足條件。所以只需要判斷[l,r]之間是否有不滿足條件的

Struts2+Hibernate資料功能+修改密碼系統

對於之前Struts2的資料校驗學習進一步深化,但是還有當Struts2在資料校驗的時候,涉及型別轉換的部分的坑還沒有填,就是本該輸入整型的文字框,當用戶輸入了一個字串,這樣的問題處理還沒有進行深究。本篇的使用者名稱與密碼的文字框都是輸入容納字串的文字框,基本輸入任何東西都

Spring Boot 服務端資料-實現資料功能 、資料、解決異常、其他規則。

1、資料校驗 實體類: Controller層:  html 檔案:      2、資料校驗 Controller層:1、在Controller中找到資料校驗的方法 對誰@Valid就是校驗誰。                        2、把

順豐科技 2019招 人工智慧與機器學習工程師線上考試 筆試程式設計題

#!/bin/python # -*- coding: utf8 -*- import sys import os import re #請完成下面這個函式,實現題目要求的功能 #當然,你也可以不按照下面這個模板來作答,完全按照自己的想法來 ^-^ #**

知乎答案2018招,筆試應該怎麼準備?|牛客網回答

作者:牛客網 連結:https://www.zhihu.com/question/64339583/answer/219703590 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

2017今日頭條頭條招(JAVA)

題目描述頭條的2017校招開始了!為了這次校招,我們組織了一個規模巨集大的出題團隊,每個出題人都出了一些有趣的題目,而我們現在想把這些題目組合成若干場考試出來,在選題之前,我們對題目進行了盲審,並定出了每道題的難度系統。一場考試包含3道開放性題目,假設他們的難度從小到大分別為

源代LruCache源代剖析

name 丟失 next() 兩個 sna eight get方法 util rem 上一篇分析了LinkedHashMap源代碼,這個Map集合除了擁有HashMap的大部分特性之外。還擁有鏈表的特點,即能夠保持遍歷順序與插入順序一致。另外。當我們將accessO

C&C++查看代運行時間

was void sed aps ble item tor store number   查看代碼運行時間有助於更好地優化項目代碼 1. Windows平臺   windows平臺下有兩種方式,精度有所不同,都需要包含<windows.h>頭文件 1) DWOR

劍指offerJava版代(完整版)

從尾到頭打印鏈表 .net 字符串 刪除 ron 代碼下載 逆序 鏈表 撲克 原文地址:https://blog.csdn.net/baiye_xing/article/details/78428561 一、引言 《劍指offer》可謂是程序猿面試的神書了,在面試中幫了我很

Django Series - 04資料的增刪改:使用者提交資料,驗證資料的有效性並傳輸至後臺(jQuery.post)

Django Series(Django2.1.2 + Anaconda3) (一)安裝並配置 Django 環境 ||| 基於 Django 進行 Web 開發 (二)Django 基礎知識:語法、教程 (三)使用者管理模組:建立使用者、登入、退出 (四)資料的增刪改:使用者提交資

極客時間資料結構與演算法總結

【極客時間】資料結構與演算法總結: 02| 資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。 20個最常用的最基礎的資料結構與演算法: 10個數據結構:陣列、連結串列、棧、佇列、散列表、二叉樹、堆、跳錶、圖、Trie樹 10個演算法:遞迴、排序、二分

插件分享短信驗證對接得推校園O2O,短信功能

步驟 提交 所有 用戶註冊 一個 插件開發 來源 鏈接 獲取驗證碼 在互億無線短信平臺找到一個插件,在這邊分享一下,有需要可以了解,比自己開發要容易很多哦。http://www.ihuyi.com/ 插件說明本插件系互億無線針對得推校園O2O短信插件開發,插件內的所有文件均

[UOJ#268]. 清華集訓2016資料互動[動態dp+可刪堆維護最長鏈]

題意 給出 \(n\) 個點的樹,每個時刻可能出現一條路徑 \(A_i\) 或者之前出現的某條路徑 \(A_i\) 消失,每條路徑有一個權值,求出在每個時刻過後能夠找到的權值最大的路徑 \(B\) 的權值是多少,權值是所有和該路徑 \(B\) 有交的路徑 \(A\) 的權值和。 \(n\leq 10^5\

ArcGIS|空間分析資料互動(Google Earth與ArcGIS,ENVI與ArcGIS)

文章目錄 Google Earth資料與ArcGIS資料互動 ENVI資料與ArcGIS資料互動 ENVI資料匯入ArcGIS ArcGIS資料匯入ENVI Google Earth資料與ArcGIS資料互動

腐爛國度2 資料整理_0.9 領袖+性格+技能+設施+迴圈

強迫症玩遊戲的結果就變成了這樣了。。。。 主要資料作者: Shadow   連結:https://www.svlog.vip/ 其他參考了LeonLXYXXT、CHOHOW、傾聽一世憂傷等的帖子 這些資料被各大網站爬走,找到資料的原作者真不容易。 主要內容以圖片釋出,

劍指offer資料流中的中位數(最大最小堆實現)

題目描述 如何得到一個數據流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用Insert()方法讀取資料流,使用GetMedian()方法獲取當前讀取資料的中位

處理流程01資料預處理

參考文獻: 1.sklearn文件 2.部落格 1.標準化(也稱去均值和方差按比例縮放) (1)原因: 資料集的標準化對scikit-learn中實現的大多數機器學習演算法來說是常見的要求 。 如果個別特徵或多或少看起來不是很像標準正態分佈(具有零均值和單位方差),那麼它們的表現

插件分享短信驗證怎麽對接PHPSHE商城系統

短信驗證碼 短信平臺 進入 follow 手機 修改 管理後臺 手機號 安裝步驟 在互億無線短信平臺找到一個插件,在這邊分享一下,有需要可以了解,比自己開發要容易很多哦。http://www.ihuyi.com/ 插件說明 本插件系互億無線針對phpsheV1.6短信插件開

深入理解JVM虛擬機器讀書筆記第八章虛擬機器位元組執行引擎

8.1 概述 8.2 執行時棧幀結構 8.2.1 區域性變量表 8.2.2 運算元棧 8.2.3 動態連線 8.2.4 方法返回地址