精华内容
下载资源
问答
  • 常用校验码(奇偶校验码、海明校验码、CRC校验码) 一、奇偶校验码二、海明校验码三、CRC校验码   计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于...

    转载自:https://www.cnblogs.com/VersionP1/p/7779251.html ,作者: FunnyOne 

     

    常用校验码(奇偶校验码、海明校验码、CRC校验码)

    一、奇偶校验码
    二、海明校验码
    三、CRC校验码

      计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于计算机的储存是通过二进制代码来实现的的,误码会导致储存的内容发生改变。为确保数据在传送过程正确无误,常使用检验码. 我们常使用的检验码有三种. 分别是奇偶校验码海明校验码循环冗余校验码(CRC) 。

     

    一、奇偶校验码

     

    学习资料:常用校验码

    概念:

      奇偶校验码是奇校验码偶校验码的统称. 它们都是通过在要校验的编码上加一位校验位组成.

    校验方法:

      如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个

    分类:

    1. 水平奇偶校验码:对每一个数据的编码添加校验位,使信息位与校验位处于同一行

    例子:

    原编码 奇校验 偶校验
    0000 0000 1 0000 0
    0010 0010 0 0010 1
    1100 1100 1 1100 0
    1010 1010 1 1010 0

    当原编码在传输、储存的过程中发生了误码,1的数量就会改变,然后就能校验出该过程出现了错误。

    1. 垂直奇偶校验码:把数据分成若干组,一组数据排成一行,再加一行校验码. 针对每一行列采用奇校验 或 偶校验

    缺点:

    1. 只能检测出奇数位出错. 如果发生偶数位错误就无法检测

      设原编码为0000,传输的过程中变成了1001。如果使用奇校验,原编码是00001,传输过后会变成10011,1仍然是奇数个,无法校验;如果使用偶校验,原编码是00000,传输过后会变成10010,1仍然是偶数个,同样无法校验。

    1. 奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码。

      校验过程中只知道1的数量发生变化,对于哪个地方发生变化无从知道。

    二、海明校验码

    学习资料:海明校验码

    实现原理:

      它的实现原理,是在m个数据位之外加上k个校验位,从而形成一个m+k位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

    两个码组对应位上数字的不同位的个数称为码组的距离,简称码距

    例:

    这两个二进制码中,有三个不相同的位置,所以码距为3.

    须知:

    1. 海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”;
    2. 信息位为m的原始数据,需要加入k位的校验码,它满足m+k+1<2^k;

    例子:

    要计算原始信息位为101101100的海明校验码。

    先用m+k+1<2^k计算出校验位:9+k+1 <2^k→k=4,即校验位为4位。

    因为海明校验码是放在2的幂次位上,所以插在位置1,2,4,8中

    用到的校验码是看 当前位置由哪几个 校验码所在的位置的和

    • 例如

    校验码的位置是1,2,4,8。位置3= 1 + 2,所以位置3用到的校验码是1和2;位置7 = 1 + 2 + 4组成的,所以位置7用到的校验码是1,2和4。

    然后将校验码校验的位置记录下来:

    • 校验码1(位置1):3,5,7,9,11,13
    • 校验码2(位置2):3,6,7,10,11
    • 校验码3(位置4):5,6,7,12,13
    • 校验码4(位置8):9,10,11,12,13

    注意:后面的数字串是位置的下标,不是值,值还是0或1。

    然后做异或运算(相同时为0,不同时为1)

    • 校验码1(位置1):1 xor 0 xor 1 xor 0 xor 1 xor 0 = 1
    • 校验码2(位置2):1 xor 1 xor 1 xor 1 xor 1 = 1
    • 校验码3(位置4):0 xor 1 xor 1 xor 0 xor 0 = 0
    • 校验码4(位置8):0 xor 1 xor 1 xor 0 xor 0 = 0

    三、循环冗余校验码(CRC校验)

    学习资料:CRC的校验原理以及例子

    原理:CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。

    实现步骤:

    双方事先约定了一个R次多项式g(x),即CRC码

    CRC码的特点:

    • 位数要少于原编码
    • 收尾为1
    • 自行决定

    例:

    原编码:1001001011

    则CRC码可以为10011,也可以为11001等

    但是:10010这种不可以,因为它的尾巴不是1,1001101011也不行,因为它的位数与原编码的一致。

    要注意的是:CRC码并非是校验码,但需要通过CRC码来获得校验码。具体校验码的话要先让原编码加上CRC码位数个0(即CRC码有的多少位,就要加上多少位0在原编码的后面)然后用新原编码除CRC码,得到的余数就是校验码

    例:

    原编码=1010001101

    CRC码设为:110101

    校验码有5位,因此

    新原编码:101000110100000

    然后用新原编码除以CRC码:

    校验码就是01110

    校验方法

    用原编码与校验码进行模2减法,获得最终原编码。此时最终原编码除以CRC码是可以整除的,由于接收方也有相同的CRC码,在数据传输的过程中不发生错误,接收方用接收到的数据除以CRC码也是可以整除的,此时为无错误。同时,不能整除,说明传输过程中数据发生了错误。

    展开全文
  • 常用校验码(奇偶校验,海明校验,CRC)学习总结 参考手册 发布时间:18-03-0716:12优质原创作者 一.为什么要有校验码? 因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候...

    常用校验码(奇偶校验,海明校验,CRC)学习总结

    参考手册

    发布时间:18-03-0716:12优质原创作者

    一.为什么要有校验码?

    因为在数据存取和传送的过程中,由于元器件或者噪音的干扰等原因会出现错误,这个时候我们就需要采取相应的措施,发现并纠正错误,对于错误的检测和校正,大多采取“冗余校验”的思想,即除原数据外,额外增加若干位编码,这些新增的代码称为校验位。

    二.数据是如何校验的?

    输入的数据m经过f得到p校验位。数据m和校验位一起通过存储器或传输线路,分别得到m'和p',这两者可能和m,f相同,也可能由于传输储存发生问题而不同。由数据m'再次经过f得到校验位p'',比较p''和p',从而得出是否出错,输出对应的信息,如何比较,会在下面的对应校验码中给出。

    三.码距

    若干位代码组成的一个字称为码字,而两个码字具有不同代码的位数为这两个码字的距离,而码制里各种码字间最小的距离称为码距。

    比如8421码,1001和0000,有两位不同,所以距离是2,而0010和0011的距离为1,是最小的距离,故8421码码距为1

    那么,码距有什么用呢?答案是码距和这种类型的码的检错,纠错能力有关。

    如8421码,由于码距是1,无检错,纠错能力,比如数据0000,如果其中一位变化,变成0001,那么,这个数据仍然是合法的。

    再如奇偶校验码中奇校验码,如100000000和010000000,码距为2,我们可以发现,如果数据中有一位变化了,如100000000变为110000000,我们可以很容易地判断出数据出错了,因为110000000不符合奇校验的编码(校验位和数据位一起所含1的个数为奇数)

    我们可以发现,校验码可以帮助扩大码距,从而找出错误。

    码距与检错、纠错能力的关系(当d≤4)

    若码距d为奇数,则能发现d-1位错,或能纠正(d-1)/2位错。若码距d为偶数,则能发现d/2位错,并能纠正(d/2-1)位错。

    四.奇偶校验码

    1.编码方式

    无论数据位多少位,校验位只有一位数据位和校验位一共所含的1个数为奇数,称为奇校验数据位和校验位一共所含的1个数为偶数,称为偶校验

    例如(加粗为校验位):

    数据

    奇校验的编码

    偶校验的编码

    00000000100000000000000000

    01010100001010100101010100

    01111111001111111101111111

    由于数据传输过程一般是出现一位错误,而奇偶校验码能发现奇数个错误,所以奇偶校验的实用价值还是很高的。

    2.实现原理

    那么,奇偶校验是怎么来发现错误的呢?根据二.数据是如何校验的我们可以知道,在数据传输之前,我们会求一次校验位,传输后,会求一次校验位,那么,在奇偶校验中,我们通过比较这两个校验位是否相同,一般是采用异或的方式,若结果为1,则说明有奇数个错误,结果为0,则说明正确或者偶数个错误。

    五.海明校验码

    1.引入

    在了解了奇偶校验码之后,我们可以稍稍做下思考,既然奇偶校验码具有一定的局限性,也就是只能检测奇数的错误,并且不能改正错误,这也就意味着数据一旦传输错误,我们必须要重新上传,那么,我们有办法确定错误发生的位置么?只要确定了错误发生的位置,改正其实就是取反。这个时候,让我们来看看奇偶校验码,它是在数据的前面或者后面加上以为校验位,那么,如果我们将数据分段,分成某些小段,这样是不是能判断错误发生的位置呢?

    2.海明校验码 最简单求法

    我们以8位数据位,4(5)位校验位为例

    我们将海明校验码表示为(H13) H12 H11 H10 H9 H8H7 H6 H5 H4 H3 H2H1其中加粗的部分为校验位,校验位所在位置为2^(i-1),i=1,2,3...我们还可以把它写成(P5) D8 D7 D6 D5 P4 D4 D3 D2 P3 D1 P2P1其中P代表的是校验位,D代表数据位

    我们来看看这个表是怎么画出来的

    首先数据位和校验位的位置我们通过公式可以得出同列数据位所占的位置对应的行的值之和为列的值。举个例子,如D1,所在列为3,所在行分别为2^0和2^1,即1和2,满足式子1+2=3。

    校验位的值为同行数据位相异或得到,至于P5,则是由所有数据位和校验位一起异或得到。

    3.海明校验码判断修复错误

    下面引入一个错误字S的概念其实错误字S也就是传输前后分别求的校验位的异或值,奇偶校验码只要看一个错误字,而海明校验码则要考虑多个错误字。S4 ~ S1为全0,说明没错. S4 ~ S1不为全0,说明有错. S5=1说明1位出错,而S5=0说明2位错,不再有效,且不能查出是哪2位出错。S4~S1的编码值对应的则是出错的海明码位号(不太清楚图表可以返回上面的表格对照):如1100,对应D8出错如1011,对应D7出错如1010,对应D6出错如1001,对应D5出错......

    Tip:我们通过观察8个数据位4个校验位的海明校验码,发现,若一位出错,则至少有两组校验码的生成收到影响,故我们得到其码距为3,根据码距与检错、纠错能力的关系可以得出该校验码能发现两位错,或修改一位错。

    4.校验码位数的确定

    前面看完后,一定有人会有疑问,为什么八位数据位我要四位或者五位校验位,三位不行么?六位不行么?那么,请继续看看下面

    假定数据位数为n,校验码为k位,则故障字位数也为k位。k位故障字所能表示的状态最多是2K,每种状态可用来说明一种出错情况。若只有一位错,则结果可能是:数据中某一位错 (n种可能)校验码中有一位错 (k种可能)无错 ( 1 种可能)

    假定最多有一位错,则n和k必须满足下列关系:

    2^k≥1+n+k, 即:2^k-1≥n+k

    所以当数据有8位时,校验码和故障字都应有至少4位。

    六.循环冗余码(CRC码)

    1.为什么大批量数据不用奇偶校验?

    在每个字符后增加一位校验位会增加大量的额外开销;尤其在网络通信中,对传输的二进制比特流没有必要再分解成一个个字符,因而无法采用奇偶校验码。

    2.模2运算

    在介绍CRC码之前,有必要介绍下计算CRC码必要的模2运算:

    模2运算不考虑加法进位和减法借位,上商的原则是当部分余数首位是1时商取1,反之商取0。然后按模2相减原则求得最高位后面几位的余数。这样当被除数逐步除完时,最后的余数位数比除数少一位。这样得到的余数就是校验位。

     

    3.基本思想

    数据信息M(x)为一个n位的二进制数据,将M(x)左移k位后,用一个约定的“生成多项式”G(x)相除,G(x)是一个k+1位的二进制数,相除后得到的k位余数就是校验位。校验位拼接到M(x)后,形成一个n+k位的代码,称该代码为循环冗余校验 ( CRC ) 码,也称(n+k,n)码。一个CRC码一定能被生成多项式整除,当数据和校验位一起送到接受端后,只要将接受到的数据和校验位用同样的生成多项式相除,如果正好除尽,表明没有发生错误;若除不尽,则表明某些数据位发生了错误。通常要求重传一次。

     

    4.CRC码求法

     

    5.CRC码检错

    将收到的CRC码用约定的生成多项式G(x)去除,如果码字无误则余数应位0,如果有某一位出错,则余数不为0,不同位数出错余数不同.

     

    展开全文
  • 常用校验码及示例

    2018-09-22 15:00:00
    分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。 奇偶校验码(Parity Codes) 奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶...

    计算机系统运行时,各个部之间要进行数据交换. 为确保数据在传送过程正确无误,常使用检验码. 我们常使用的检验码有三种.
     分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。


    奇偶校验码(Parity Codes)

    奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码。奇偶校验码是奇校验码和偶校验码的统称.
     它们都是通过在要校验的编码上加一位校验位组成. 如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个。

    例:原编码   奇校验 偶校验0000   0000 1 0000 00010   0010 0 0010 11100   1100 1 1100 01010   1010 1 1010 0

    如果发生奇数个位传输出错,那么编码中1的个数就会发生变化. 从而校验出错误,要求从新传输数据。目前应用的奇偶校验码有3种.

    水平奇偶校验码对每一个数据的编码添加校验位,使信息位与校验位处于同一行.

    垂直奇偶校验码把数据分成若干组,一组数据排成一行,再加一行校验码. 针对每一行列采用奇校验 或 偶校验例: 有32位数据10100101 00110110 11001100 10101011垂直奇校验    垂直偶校验10100101    10100101    数据00110110    0011011011001100    1100110010101011    1010101100001011    11110100    校验

    水平垂直奇偶校验码就是同时用水平校验和垂直校验例:奇校验 奇水平     偶校验 偶水平 10100101 1     10100101 0   数据 00110110 1     00110110 0 11001100 1     11001100 0 10101011 0     10101011 1 00001011 0     11110100 1   校验

     

      我们把传送过来的1100111000逐位相加就会得到一个1,应该注意的的,如果在传送中1100111000变成为0000111000,通过上面的运算也将得到1,接收方就会认为传送的数据是正确的,这个判断正确与否的过程称为校验。而使用上面方法进行的校验称为奇校验,奇校验只能判断传送数据中奇数个数据从0变为1或从1变为0的情况,对于传送中偶数个数据发生错误,它就无能为力了。
      Odd Parity(奇校验),校核数据完整性的一种方法,一个字节的8个数据位与校验位(parity bit )加起来之和有奇数个1。校验线路在收到数后,通过发生器在校验位填上0或1,以保证和是奇数个1。因此,校验位是0时,数据位中应该有奇数个1;而校验位是1时,数据位应该有偶数个1。如果读取数据时发现与此规则不符,CPU会下令重新传输数据。

      奇/偶校验(ECC)是数据传送时采用的一种校正数据错误的一种方式,分为奇校验和偶校验两种。 如果是采用奇校验,在传送每一个字节的时候另外附加一位作为校验位,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。 同理偶校验的过程和奇校验的过程一样,只是检测数据中“1”的个数为偶数。

     

    海明校验码(Hamming Code)

    海明码也是利用奇偶性来校验数据的. 它是一种多重奇偶校验检错系统,它通过在数据位之间插入k个校验位,来扩大码距,从而实现检错和纠错.

    设原来数据有n位,要加入k位校验码.怎么确定k的大小呢? k个校验位可以有pow(2,k) (代表2的k次方) 个编码,其中有一个代表是否出错. 剩下pow(2,k)-1个编码则用来表示到底是哪一位出错. 因为n个数据位和k个校验位都可能出错,所以k满足pow(2,k)-1
     >= n+k。

    设 k个校验码为 Pk,...,P1, n个数据位为D(n-1),...,D1,D0,产生的海明码为 H(n+k),...,H1。如有8个数据位,根据pow(2,k)-1 >= n+k可以知道k最小是4。那么得到的海明码是:

    H12 H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1D7 D6 D5 D4 P4 D3 D2 D1 P3 D0 P2 P1  (Pi在海明码的第pow(2,i-1)位置;数据位Di则依序从低到高占据海明码中剩下位置)

    然后怎么知道Pi校验哪个位呢. 自己可以列个校验关系表

    海明码 下标 校验位组H1(P1) 1 P1H2(P2) 2 P2H3(D0) 1+2 P1,P2H4(P3) 4 P3H5(D1) 1+4 P1,P3H6(D2) 2+4 P2,P3H7(D3) 1+2+4 P1,P2,P3H8(P4) 8 P4H9(D4) 1+8 P1,P4H10(D5) 2+8 P2,P4H11(D6) 1+2+8 P1,P2,P4H12(D7) 4+8 P3,P4

    从表中可以看出P1校验 P1,D0,D1,D3,D4,D6P2校验 P2,D0,D2,D3,D5,D6P3校验 P3,D1,D2,D3,D7P4校验 P4,D4,D5,D6,D7其实上表很有规律很容易记,要知道海明码Hi由哪些校验组校验,可以把i化成二进制数数中哪些位k是1,就有哪些Pk校验

    如H7 7=0111 所以由P1,P2,P3。 H11 11=1011 所以由P1,P2,P4。  H3 3=0011 所以由P1,P2

    那看看Pi的值怎么确定,如果使用偶校验,则P1=D0 xor D1 xor D3 xor D4 xor D6P2=D0 xor D2 xor D3 xor D5 xor D6P3=D1 xor D2 xor D3 xor D7P4=D4 xor D5 xor D6 xor D7其中xor是异或运算,奇校验的话把偶校验的值取反即可.

     

    那怎么校验错误呢. 其实也很简单. 先做下面运算.G1 = P1 xor D0 xor D1 xor D3 xor D4 xor D6G2 = P2 xor D0 xor D2 xor D3 xor D5 xor D6G3 = P3 xor D1 xor D2 xor D3 xor D7G4 = P4 xor D4 xor D5 xor D6 xor D7

    若采用偶校验,则G4G3G2G1全为0表示接收到的数据无错误(奇校验则应全为1)。当G4G3G2G1不全为0说明发生了错误,而且G4G3G2G1的十进制指出了发生错误的位置,例如 G4G3G2G1=1010,说明H10(D5)出错了,将其取反即可纠正错误。

     

    异或,英文为exclusive OR,或缩写成xor。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符号为“xor”。a⊕b
     = (?a ∧ b) ∨ (a ∧?b)如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。


    循环冗余校验码(Cyclic Redundancy Check)

    CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书就给个例题,讲讲方法.现在简单介绍下它的原理:

    在k位信息码后接r位校验码,对于一个给定的(n,k)码。可以证明(数学高手自己琢磨证明过程)存在一个最高次幂为 n-k=r 的多项式g(x),根据g(x)可以生成k位信息的校验码,g(x)被称为 生成多项式

    用C(x)=C(k-1)C(k-2)...C0表示k个信息位,把C(x)左移r位,就是相当于 C(x)*pow(2,r) 给校验位空出r个位来了.给定一个 生成多项式g(x),可以求出一个校验位表达式r(x) 。C(x)*pow(2,r) / g(x) = q(x) + r(x)/g(x) 用C(x)*pow(2,r)去除生成多项式g(x)商为q(x)余数是r(x)。所以有C(x)*pow(2,r)
     = q(x)*g(x) + r(x)

    C(x)*pow(2,r) + r(x)就是所求的n位CRC码,由上式可以看出它是生成多项式g(x)的倍式.所以如果用得到的n位CRC码去除g(x)如果余数是0,就证明数据正确. 否则可以根据余数知道出错位.在CRC运算过程中,四则运算采用 mod 2运算(后面介绍),即不考虑进位和借位. 所以上式等价于C(x)*pow(2,r) + r(x) = q(x)*g(x)

    继续前先说下基本概念吧.1.多项式和二进制编码x的最高次幂位对应二进制数的最高位.以下各位对应多项式的各幂次. 有此幂次项为1,无为0. x的最高幂次为r时, 对应的二进制数有r+1位 例如g(x)=pow(x,4) + pow(x,3) + x + 1 对应二进制编码是 11011

    2.生成多项式是发送方和接受方的一个约定,也是一个二进制数,在整个传输过程中,这个数不会变.在发送方利用 生成多项式 对信息多项式做模2运算生成校验码.在接受方利用 生成多项式 对收到的 编码多项式 做模2运算校验和纠错.

    生成多项式应满足:a.生成多项式的最高位和最低位必须为1b.当信息任何一位发生错误时,被生成多项式模2运算后应该使余数不为0c.不同位发生错误时,应该使余数不同.d.对余数继续做模2除,应使余数循环.

    生成多项式很复杂,不过不用我们生成。

    下面给出一些常用的生成多项式表n k 二进制码(自己根据多项式和二进制编码 的介绍转)7 4 1011 或 11017 3 11011 或 1011115 11 101131 26 100101

    3.模2运算a.加减法法则0 +/- 0 = 00 +/- 1 = 11 +/- 0 = 11 +/- 1 = 0注意:没有进位和借位

    b.乘法法则利用模2加求部分积之和,没有进位

    c.除法法则利用模2减求部分余数,没有借位,每商1位则部分余数减1位,余数最高位是1就商1,不是就商0,当部分余数的位数小于余数时,该余数就是最后余数.

    例 1110
    1011)1100000101111101011101010110010(每商1位则部分余数减1位,所以前两个0写出)0000010(当部分余数的位数小于余数时,该余数就是最后余数)最后商是1110余数是010

    好了说了那么多没用的理论.下面讲下CRC的实际应用.例: 给定的生成多项式g(x)=1011, 用(7,4)CRC码对C(x)=1010进行编码.由题目可以知道下列的信息:C(x)=1010,n=7,k=4,r=3,g(x)=1011 C(x)*pow(2,3)=1010000 C(x)*pow(2,3) / g(x) = 1001 + 11/1011 所以r(x)=011.所以要求的编码为1010011例2: 上题中,数据传输后变为1000011,试用纠错机制纠错. 1000011 / g(x) = 1011 + 110/1011

    不能整除,所以出错了. 因为余数是110.查1011出错位表可以知道是第5位出错.对其求反即可.

     

      冗余码的计算方法是,先将信息码后面补0,补0的个数是生成多项式最高次幂;将补零之后的信息码除以G(X),注意除法过程中所用的减法是模2减法,即没有借位的减法,也就是异或运算。当被除数逐位除完时,得到比除数少一位的余数。此余数即为冗余位,将其添加在信息位后便构成CRC码字。

     

      例如,假设信息码字为11100011,生成多项式G(X)=X^5+X^4+X+1,计算CRC码字。

     

      G(X) = X^5+X^4+X+1,也就是110011,因为最高次是5,所以,在信息码字后补5个0,变为1110001100000。用1110001100000除以110011,余数为11010,即为所求的冗余位。

     

      因此发送出去的CRC码字为原始码字11100011末尾加上冗余位11010,即 1110001111010。接收端收到码字后,采用同样的方法验证,即将收到的码字除以G(X),发现余数是0,则认为码字在传输过程中没有出错。

    ---------------------

    本文来自 ncepu_xu 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ncepu_xu/article/details/70208630?utm_source=copy

    转载于:https://www.cnblogs.com/jingcaijueyan/p/9690136.html

    展开全文
  • 常用正则校验码

    2019-02-18 16:34:35
    二、校验字符的表达式 汉字: ^[\u4e00-\u9fa5]{0,}$ 英文和数字: ^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$ 长度为3-20的所有字符: ^.{3,20}$ 由26个英文字母组成的字符串: ^...
    1. 数字:^[0-9]*$

    2. n位的数字:^\d{n}$

    3. 至少n位的数字:^\d{n,}$

    4. m-n位的数字:^\d{m,n}$

    5. 零和非零开头的数字:^(0|[1-9][0-9]*)$

    6. 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

    7. 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$

    8. 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$

    9. 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

    10. 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

    11. 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$^\+?[1-9][0-9]*$

    12. 非零的负整数:^\-[1-9][]0-9"*$^-[1-9]\d*$

    13. 非负整数:^\d+$^[1-9]\d*|0$

    14. 非正整数:^-[1-9]\d*|0$^((-\d+)|(0+))$

    15. 非负浮点数:^\d+(\.\d+)?$^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

    16. 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

    17. 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$

    18. 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$

    19. 浮点数:^(-?\d+)(\.\d+)?$^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

    二、校验字符的表达式

    1. 汉字:^[\u4e00-\u9fa5]{0,}$

    2. 英文和数字:^[A-Za-z0-9]+$^[A-Za-z0-9]{4,40}$

    3. 长度为3-20的所有字符:^.{3,20}$

    4. 由26个英文字母组成的字符串:^[A-Za-z]+$

    5. 由26个大写英文字母组成的字符串:^[A-Z]+$

    6. 由26个小写英文字母组成的字符串:^[a-z]+$

    7. 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

    8. 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$

    9. 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$

    10. 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$

    11. 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+ 12 禁止输入含有~的字符:[^~\x22]+

    三、特殊需求表达式

    1. Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

    2. 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

    3. InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

    4. 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

    5. 电话号码(“XXX-XXXXXXX”、“XXXX-XXXXXXXX”、“XXX-XXXXXXX”、“XXX-XXXXXXXX”、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

    6. 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}

    7. 身份证号(15位、18位数字):^\d{15}|\d{18}$

    8. 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

    9. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

    10. 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$

    11. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

    12. 日期格式:^\d{4}-\d{1,2}-\d{1,2}

    13. 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$

    14. 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$

    15. 钱的输入格式:

    16. 1.有四种钱的表示形式我们可以接受:“10000.00” 和 “10,000.00”, 和没有 “分” 的 “10000” 和 “10,000”:^[1-9][0-9]*$

    17. 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$

    18. 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$

    19. 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$

    20. 5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 “10” 和 “10.2” 是通过的:^[0-9]+(.[0-9]{2})?$

    21. 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$

    22. 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$

    23 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$

    1. 备注:这就是最终结果了,别忘了"+“可以用”*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里

    2. xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$

    3. 中文字符的正则表达式:[\u4e00-\u9fa5]

    4. 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))

    5. 空白行的正则表达式:\n\s*\r (可以用来删除空白行)

    6. HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)

    7. 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)

    8. 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)

    9. 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)

    10. IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)

    11. IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

    展开全文
  • 数据校验码是一种常用的带有发现某些错误,甚至带有一定自动改错能力的数据编码方法。 例子: 码距:两个合法码字对应位上数字的不同位的个数 上图中,方案一的码距为1,因为00和01之间只有1位数字不同。而方案二...
  • 校验码

    2019-06-23 15:11:00
    常用校验码有奇偶校验码(Parity)、海明校验码和循环冗余校验码(CRC) 奇数偶数用异或操作即可计数实现。 奇偶校验码是对每个byte (8 bits) 加一位校验码,此时根据所采用的的是奇校验还是偶校验来确定校验码...
  • 常用的密码校验

    2020-07-27 15:26:35
    } else { temp[i][j] = 1 } //保存当前temp中最大的数字,并 if (max [i][j]) { max = temp[i][j] index = i } } else { temp[i][j] = 0 } } } return str1.substr(index - max + 1, max).length } 其它密码校验规则...
  • 校验码】数据校验码

    千次阅读 2016-11-05 22:05:59
    计算机系统在进行数据的传输和存储时,难免会发生错误。为了避免这种错误,一方面是从硬件的方面着手,提高硬件的抗干扰能力和可靠性;而另一方面在数据编码上采取编码纠码的措施,使得...常用的数据校验码有奇偶校验码
  • 最近下载msdn 版vista时,发现微软同时提供了SHA1校验码,我们就可以通过这些校验工具来比较下载的文件是否原汁原味。 那么SHA1是什么呢? SHA1(Secure Hash Algorithm)是由NIST NSA设计为同DSA一起使用的,它对长度...
  • 这两天项目中要使用到CRC校验功能,网上大量的例子是针对c、delphi的例子...一、什么是CRC校验:CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字...
  • 循环冗余编码(CRC)是二进制通信系统中一种常用的差错检测方法,它是通过在原始数据后面添加冗余校验码来实现检测差错的目的。CRC编码的基本原理就是:CRC可由原始数据流的二进制去除以一称作为生成多项式的常数,...
  • 常用校验

    2019-08-26 15:15:26
     //如果等于2,则说明校验码是10,身份证号码最后一位应该是X  if(idCardMod==2){  if(idCardLast=="X"||idCardLast=="x"){  return true;  }else{  return false;  }  }else{  //用计算出的验证码...
  • 常用编码的介绍
  • js常用校验

    2016-07-28 10:54:00
    JS常用校验方法(判断输入框是否为空,数字,电话,邮件,四舍五入等)   出其:http://blog.163.com/likui_1314159/blog/static/77093212201182252813121/ JS常用校验方法: 1、判断输入框是否为空,为...
  • CRC校验码的理解+CRC校验码算法代码

    万次阅读 2015-11-26 20:54:48
    Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,...
  • CRC校验码

    千次阅读 2017-03-15 14:55:56
    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,...
  • 校验码计算器

    热门讨论 2013-03-05 09:11:10
    用VB编写的一个校验码计算器。可计算CRC8、CRC16、累加和、异或和、LRC和这些常用的检验码。可按字符或者字节分别计算校验码。可计算十六进制转换十进制,分单字节转换、双字节转换(先低后高,或先高后低)。可按每...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,718
精华内容 687
关键字:

常用校验码