crc校驗的python實現

crc(Cyclic Redundancy Check):循環(huán)冗余校驗璃搜,是一種常用的查錯校驗碼径筏。本質是在要發(fā)送的信息后面附加一個校驗碼(均為二進制序列)。

實現步驟

  • 選擇合適的生成多項式
  • 將原始信息左移生成多項式階數減一位
  • 將左移后的信息與生成多項式模二相除得到余數尸变,余數即校驗碼(校驗碼位數比生成多項式階數小一夹纫,高位0不能省略)
  • 將檢驗碼附加在原信息后

源代碼

類文件

class CRC:
    """循環(huán)冗余檢驗

    parameters
    ----------

    info : list
        需要被編碼的信息

    crc_n : int, default: 32
        生成多項式的階數

    p : list
        生成多項式

    q : list
        crc后得到的商

    check_code : list
        crc后得到的余數,即計算得到的校驗碼

    code : list
        最終的編碼

    ----------

    """

    def __init__(self, info, crc_n=32):
        self.info = info

        # 初始化生成多項式p
        loc = [32, 26, 23, 22, 16, 12, 11, 10, 8, 7, 5, 2, 1, 0]
        if crc_n == 8:
            loc = [8, 2, 1, 0]
        elif crc_n == 16:
            loc = [16, 15, 2, 0]
        p = [0 for i in range(crc_n + 1)]
        for i in loc:
            p[i] = 1

        info = self.info.copy()
        times = len(info)
        n = crc_n + 1

        # 左移補零
        for i in range(crc_n):
            info.append(0)
        # 除
        q = []
        for i in range(times):
            if info[i] == 1:
                q.append(1)
                for j in range(n):
                    info[j + i] = info[j + i] ^ p[j]
            else:
                q.append(0)

        # 余數
        check_code = info[-crc_n::]

        # 生成編碼
        code = self.info.copy()
        for i in check_code:
            code.append(i)

        self.crc_n = crc_n
        self.p = p
        self.q = q
        self.check_code = check_code
        self.code = code

    def print_format(self):
        """格式化輸出結果"""

        print('{:10}\t{}'.format('信息:', self.info))
        print('{:10}\t{}'.format('生成多項式:', self.p))
        print('{:10}\t{}'.format('商:', self.q))
        print('{:10}\t{}'.format('余數:', self.check_code))
        print('{:10}\t{}'.format('編碼:', self.code))

測試代碼

import numpy as np
# 隨機信息
m = np.random.randint(0, 2, 10)
m = list(m)
crc = CRC(m, 32)
crc.print_format()

輸出

信息:         [1, 1, 1, 1, 1, 1, 0, 1, 1, 0]
生成多項式:      [1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1]
商:          [1, 0, 0, 1, 0, 1, 1, 0, 0, 0]
余數:         [1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0]
編碼:         [1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0]
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末崔挖,一起剝皮案震驚了整個濱河市贸街,隨后出現的幾起案子庵寞,更是在濱河造成了極大的恐慌,老刑警劉巖薛匪,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捐川,死亡現場離奇詭異,居然都是意外死亡蛋辈,警方通過查閱死者的電腦和手機属拾,發(fā)現死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冷溶,“玉大人渐白,你說我怎么就攤上這事〕哑担” “怎么了纯衍?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苗胀。 經常有香客問我襟诸,道長,這世上最難降的妖魔是什么基协? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任歌亲,我火速辦了婚禮,結果婚禮上澜驮,老公的妹妹穿的比我還像新娘陷揪。我一直安慰自己,他們只是感情好杂穷,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布悍缠。 她就那樣靜靜地躺著,像睡著了一般耐量。 火紅的嫁衣襯著肌膚如雪飞蚓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天廊蜒,我揣著相機與錄音趴拧,去河邊找鬼。 笑死劲藐,一個胖子當著我的面吹牛八堡,可吹牛的內容都是我干的。 我是一名探鬼主播聘芜,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缝龄!你這毒婦竟也來了汰现?” 一聲冷哼從身側響起挂谍,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞎饲,沒想到半個月后口叙,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡嗅战,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年妄田,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮捍。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡疟呐,死狀恐怖,靈堂內的尸體忽然破棺而出东且,到底是詐尸還是另有隱情启具,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布珊泳,位于F島的核電站鲁冯,受9級特大地震影響,放射性物質發(fā)生泄漏色查。R本人自食惡果不足惜薯演,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秧了。 院中可真熱鬧跨扮,春花似錦、人聲如沸示惊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽米罚。三九已至钧汹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間录择,已是汗流浹背拔莱。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隘竭,地道東北人塘秦。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像动看,于是被迫代替她去往敵國和親尊剔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容