精华内容
下载资源
问答
  • 本文实例讲述了Symfony数据校验方法。分享给大家供大家参考。具体分析如下: 校验在web应用程序中是一个常见的任务。数据输入到表单需要被校验。数据在被写入数据库之前或者传入一个webservice时也需要被校验。 ...
  • 常见的数据校验方法

    千次阅读 2017-07-28 15:01:01
    常见的数据校验方法   1. 校验是什么 校验,是为保护数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。当接收方用同样的算法再算一次校验值,如果两次校验值一样,表示数据完整。   2. 最简单...

    转自http://blog.csdn.net/ky_heart/article/details/53048692

    常见的数据校验方法

     

    1.      校验是什么

    校验,是为保护数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。当接收方用同样的算法再算一次校验值,如果两次校验值一样,表示数据完整。

     

    2.      最简单的校验

    实现方法:将原始数据和待比较的数据直接进行比较,看是否完全一样。

    特点:最安全准确效率最低

    适用范围:简单的数据量极小的通讯

     

    3.       奇偶校验

    实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来传送奇/偶校验位来检验错误。

    奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:

    1 0110,0101

    0 0110,0001

    偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:

    1 0100,0101

    0 0100,0001

    特点:能够检测出信息传输过程中的1位误码。

          出现错误后,不能进行修改,只能要求重发。

          简单,应用范围广。

     

     

    4.       CRC循环冗余校验

    实现方法:利用除数以及余数的原理进行错误检测,将接收到的码组进行除法运算 
    ,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错。

    生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

    CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得

    V(x)=A(x)g(x)=xRm(x)+r(x);

    其中:    m(x)为K次信息多项式, r(x)为R-1次校验多项式,

             g(x)称为生成多项式:

    g(x)=g0+g1x+g2x2+...+g(R-1)x(R-1)+gRxR

    发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。

    CRC校验码软件生成方法:

        借助于多项式除法,其余数为校验字段。

    例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 

         假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001

          x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;

    采用多项式除法:  得余数为: 1010     (即校验字段为:1010)

    发送方:发出的传输字段为: 1 0 1 1 0 0 11 0 10

                             信息字段      校验字段

    接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)

                     如果能够除尽,则正确。

     

    特点:信息字段和校验字段的长度可以任意选定。

          编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制。

     

    具体实现代码见博客:http://blog.csdn.net/xiaoku

     

     

    5.       bcc异或校验法

    实现方法:将所有数据都和一个指定的初始值(通常是0)异或一次,所得结果为校验值。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。 

    特点:应用于很多基于串口的通讯方法。

     

     

    6.    md5校验和数字签名

    实现方法:主要有md5des算法。 

    适用范围:数据比较大或要求比较高的场合。如md5用于大量数据、文件校验,des用于保密数据的校验(数字签名)等等。 

    应用例子:文件校验、银行系统的交易数据 

    如客户往我们数据中心同步一个文件,该文件使用MD5校验,那么客户在发送文件的同时会再发一个存有校验码的文件,我们拿到该文件后做MD5运算,得到的计算结果与客户发送的校验码相比较,如果一致则认为客户发送的文件没有出错,否则认为文件出错需要重新发送。


    展开全文
  • 常用的数据校验方法

    万次阅读 2019-07-15 15:14:28
    1.什么是数据校验 通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。 2.最简单的检验 ...

    1.什么是数据校验 
    通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。

    2.最简单的检验 
    实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。同时也是效率最低的。

    适用范围:简单的数据量极小的通讯。

    3.奇偶校验Parity Check 
    实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。校验位可以通过数据位异或计算出来。

    根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 
    校验方法 
    奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 
    1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。 
    偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数 
    1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了 
    范例 
    串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为: 
    0100,0101=45H 
    D7 D0 
    由于干扰,可能使位变为1,(为什么不变0?)这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。 
    奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如: 
    1 0110,0101 
    0 0110,0101 
    偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如: 
    1 0100,0101 
    0 0100,0101 
    奇偶校验能够检测出信息传输过程中的部分误码(奇数位误码能检出,偶数位误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。有些检错方法,具有自动纠错能力。如循环冗余码(CRC)检错等

    应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位用于放校验值。

    4.bcc异或校验法(block check character) 
    实现方法:很多基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常 
    把她附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。 
    校验值计算的代码类似于: 
    unsigned uCRC=0;//校验初始值 
    for(int i=0; i < DataLenth;i++) uCRC^=Data[i];

    适用范围:适用于大多数要求不高的数据通讯。

    应用例子:ic卡接口通讯、很多单片机系统的串口通讯都使用。

    5.crc循环冗余校验(Cyclic Redundancy Check) 
    实现方法:这是利用除法及余数的原理来进行错误检测的.将接收到的码组进行除法运算 
    ,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错。crc校验 
    具还有自动纠错能力。

    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 
    工作原理 
    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。 
    对应关系 
    多项式和二进制数有直接对应关系:X的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:X的最高幂次为R,转换成对应的二进制数有R+1位。 
    多项式包括生成多项式G(X)和信息多项式C(X)。 
    如生成多项式为G(X)=X4+X3+X+1, 可转换为二进制数码11011。 
    而发送信息位 101111,可转换为数据多项式为C(X)=X5+X3+X2+X+1。 
    生成多项式 
    是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 
    在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接收方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 
    应满足以下条件: 
    A、生成多项式的最高位和最低位必须为1。 
    B、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。 
    C、不同位发生错误时,应该使余数不同。 
    D、对余数继续做除,应使余数循环。 
    校验码位数 
    CRC校验码位数 = 生成多项式位数 - 1。注意有些生成多项式的简记式中将生成多项式的最高位1省略了。 
    生成步骤 
    1、将X的最高次幂为R的生成多项式G(X)转换成对应的R+1位二进制数。 
    2、将信息码左移R位,相当于对应的信息多项式C(X)*2R。 
    3、用生成多项式(二进制数)对信息码做除,得到R位的余数(注意:这里的二进制做除法得到的余数其实是模2除法得到的余数,并不等于其对应十进制数做除法得到的余数。)。 
    4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。 
    【例】假设使用的生成多项式是G(X)=X3+X+1。4位的原始报文为1010,求编码后的报文。 
    解: 
    1、将生成多项式G(X)=X3+X+1转换成对应的二进制除数1011。 
    2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文C(X)左移3(R)位变成1010 000 
    3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或: 
    1010000 
    1011 
    ———–】 
    0001000 
    0001011 
    ———-】 
    0000011 
    得到的余位011,所以最终编码为:1010 011 
    原则 
    若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 
    V(x)=A(x)g(x)=xRm(x)+r(x); 
    其中: m(x)为K次原始的信息多项式, r(x)为R-1次校验多项式(即CRC校验和), 
    g(x)称为生成多项式: 
    g(x)=g0+g1x1+ g2x2+…+g(R-1)x(R-1)+gRxR 
    发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。 
    生成方法 
    借助于模2除法则,其余数为校验字段。 
    例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 
    假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 
    x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000; 
    采用模2除法则: 得余数为: 1010(即校验字段为:1010) 
    发送方:发出的传输字段为: 1 0 1 1 0 0 1 1010 
    信息字段 校验字段 
    接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法) 
    如果能够除尽,则正确, 
    给出余数(1010)的计算步骤: 
    除法没有数学上的含义,而是采用计算机的模二除法,即除数和被除数做异或运算。进行异或运算时除数和被除数最高位对齐,按位异或。 
    10110010000 
    ^11001 
    ————————–】 
    01111010000 
    1111010000 
    ^11001 
    ————————-】 
    0011110000 
    11110000 
    ^11001 
    ————————–】 
    00111000 
    111000 
    ^11001 
    ——————-】 
    001010 
    则四位CRC校验码就为:1010。 
    利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。

    crc检验主要有计算法和查表法两种方法,网上很多实现代码。

    适用范围:CRC-12码通常用来传送6-bit字符串;CRC-16及CRC-CCITT码则用是来传送 
    8-bit字符。CRC-32:硬盘数据,网络传输等

    应用例子:rar,以太网卡芯片、MPEG解码芯片中

    6.md5校验和数字签名 
    实现方法:主要有md5和des算法。

    适用范围:数据比较大或要求比较高的场合。如md5用于大量数据、文件校验,des用于保 
    密数据的校验(数字签名)等等。

    应用例子:文件校验、银行系统的交易数据

    7.海明码校验 
    将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。实质上,海明校验是一种多重校验。 
    假设为k个数据位设置r个校验位,则校验位能表示2^r个状态,可用其中的一个状态指出 “没有发生错误”,用其余的2 ^r -1个状态指出有错误发生在某一位,包括k个数据位和r个校验位,因此校验位的位数应满足如下关系: 
    2^r ≥ k + r + 1 (2.7) 
    如要能检出与自动校正一位错,并能同时发现哪位错,此时校验位的位数r和数据位的位数k应满足下述关系: 
    2^r-1 ≥ k + r (2.8) 
    按上述不等式,可计算出数据位k与校验位r的对应关系,如表2.2所示。 
    表2.2 
    k值 最小r值 
    2~4 3 
    5~11 4 
    12~26 5 
    27~57 6 
    58~120 7 
    分组原则 
    编辑 
    在海明码中, 位号数(1、2、3、……、n)为2的权值的那些位,即: 
    1(2^0)、2(2^1)、4(2^2)、8(2^3)、…2^(r-1)位,作为奇偶校验位,并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。例如: N=11(海明码位数)K=7(数据位数)r=4(校验位) ,相应海明码可表示位号为: 1, 2, 3, 4 ,5 ,6, 7, 8, 9 ,10 ,11,校验位P占第1,2,4,8位,其他位为有效信息位,海明码中的校验位分别标示为P1,P2,P3,P4… Pr ,并被信息位中的一至若干位所校验,其规律是:第i位,由校验位位号之和等于i的那些校验位所校验,如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验,海明码的位号为5,它被P1P3(位号分别为1,4)所校验。归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。 
    设计海明码编码的关键技术,是合理地把每个数据位分配到r个校验组中,以确保能发现码字中任何一位出错;若要实现纠错,还要求能指出是哪一位出错,对出错位求反则得到该位的正确值。例如,当数据位为3位(用D3 D2 D1表示)时,检验位应为4位(用P4 P3 P2 P1表示)。可通过表2.3表示的关系,完成把每个数据位划分在形成不同校验位的偶校验值的逻辑表达式中。 
    表2.3 校验位与数据位的对应关系 
    在P1、P2、P3、P4竖列相应行分别填1, 
    在该4列的低3横行其它位置分别填0, 
    在最顶横行的每个尚空位置都分别填1。 
    若只看低3横行,右4竖列的3个bit的组合值分别为十进制的1、2、4、0,则分配 D1 D2 D3列的组合值为3 5 6,保证低3横行各竖列的编码值各不相同。 
    表中D3 D2 D1为三位数据位,P4 P3 P2 P1为四位校验位。其中低三位中的每一个校验位P3 P2 P1的值,都是用三个数据位中不同的几位通过偶校验运算规则计算出来的。其对应关系是:对Pi(i的取值为1~3),总是用处在Pi取值为1的行中的、用1标记出来的数据位计算该Pi的值。最高一个校验位P4,被称为总校验位,它的值,是通过对全部三个数据位和其它全部校验位(不含P4本身)执行偶校验计算求得的。 
    形成各校验位的值的过程叫做编码,按刚说明的规则,4个校验位所用的编码方程为: 
    P4 = D3 D2 D1 P3 P2 P1 
    P3 = D3 D2 
    P2 = D3 D1 
    P1 = D2 D1 
    由多个数据位和多个校验位组成的一个码字,将作为一个数据单位处理,例如被写入内存或被传送走。之后,在执行内存读操作或在数据接收端,则可以对得到的码字,通过偶校验来检查其合法性,通常称该操作过程为译码,所用的译码方程为: 
    S4 = P4 D3 D2 D1 P3 P2 P1 
    S3 = P3 D3 D2 
    S2 = P2 D3 D1 
    S1 = P1 D2 D1 
    对应关系 
    编辑 
    译码方程和编码方程的对应关系很简单。译码方程,是用一个校验码和形成这个校验码的编码方程执行异或,实际上是又一次执行偶校验运算。通过检查四个S的结果,可以实现检错纠错的的目的。实际情况是,当译码求出来的S4、S3、S2、S1的得值与表2.3中的那一列的值相同,就说明是哪一位出错;故人们又称表2.3为出错模式表。若出错的是数据位,对其求反则实现纠错;若出错的是校验位则不必理睬。举例如下: 
    任何一位(含数据位、校验位)均不错,则四个S都应为0值; 
    任何单独一位数据位出错,四个S中会有三个为1;如D3错,则S4 S3 S2 S1为1110。 
    若单独一位校验位出错,四个S中会有一个或两个为1;如P1错,S4 S3 S2 S1为1001,如P4错,S4 S3 S2 S1为1000。 
    任何两位(含数据位、校验位)同时出错,S4一定为0,而另外三个S位一定不全为0,此时只知道是两位同时出错,但不能确定是哪两位出错,故已无法纠错。如D1、 P2出错,会使S4 S3 S2 S1为0001。请注意,S4的作用在于区分是奇数位出错还是偶数位出错,S4为1是奇数位错,为0是无错或偶数位错。这不仅为发现两位错所必需,也是为确保能发现并改正一位错所必需的。若不设置S4,某种两位出错对几个S的影响与单独另一位出错可能是一样的(不必花费精力推敲),此时若不加以区分,简单地按一位出错自动完成纠错处理反而会帮倒忙

    展开全文
  • 行业-电子政务-一种数据校验方法及装置、电子设备.zip
  • 业分类-物理装置-一种数据校验方法及装置.zip
  • 用于单片机的CRC检验方法一、应用场景二、代码实现1.CRC表格2.CRC函数3.使用demo闲扯 一、应用场景 前两天做了一个固件的远程升级软件,是基于stm32的固件,传输的数据量少,用这种crc方法也够用了。 二、代码实现 1...

    一、应用场景

    前两天做了一个固件的远程升级软件,是基于stm32的固件,传输的数据量少,用这种crc方法也够用了。

    二、代码实现

    1.CRC表格

    crc table:

    static const u16 ccitt_table[256] =
      {
        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
        0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
        0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
        0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
        0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
        0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
        0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
        0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
        0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
        0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
        0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
        0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
        0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
        0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
        0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
        0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
        0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
        0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
        0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
        0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
        0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
        0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
        0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
        0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
        0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
        0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
        0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
        0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
        0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
        0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
        0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
        0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
      };
    
    

    2.CRC函数

    代码如下(示例):

    static u16 CRC16(u16 crc, u8 *q, int len)
    {
      while (len-- > 0)
        crc = (crc << 8) ^ ccitt_table[((crc >> 8) ^ *q++) & 0xff];
      return crc;
    }
    
    

    3.使用demo

    int main(void)
    {
      u16 crc=0;
      u8 buffer[10]={0x01,0x45,0x23,0x55,0x66,0x77,0x88,0x11,0x22,0x33};
      crc=CRC16(crc,buffer,10);
      return 0;
    }
    
    

    闲扯

    以颤抖之身追赶,怀敬畏之心挑战

    展开全文
  • 数据校验方法(有待整理)

    千次阅读 2016-11-05 20:53:12
    1.什么是数据校验 通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。 2.最简单的检验 ...

    1.什么是数据校验
    通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。

    2.最简单的检验
    实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。同时也是效率最低的。

    适用范围:简单的数据量极小的通讯。

    3.奇偶校验Parity Check
    实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。校验位可以通过数据位异或计算出来。

    根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
    校验方法
    奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
    1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
    偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
    1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了
    范例
    串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:
    0100,0101=45H
    D7 D0
    由于干扰,可能使位变为1,(为什么不变0?)这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送1位奇/偶校验位。可采用奇校验或偶校验。
    奇校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为奇数,如:
    1 0110,0101
    0 0110,0101
    偶校验:所有传送的数位(含字符的各数位和校验位)中,“1”的个数为偶数,如:
    1 0100,0101
    0 0100,0101
    奇偶校验能够检测出信息传输过程中的部分误码(奇数位误码能检出,偶数位误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。有些检错方法,具有自动纠错能力。如循环冗余码(CRC)检错等

    应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位用于放校验值。

    4.bcc异或校验法(block check character)
    实现方法:很多基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常
    把她附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。
    校验值计算的代码类似于:
    unsigned uCRC=0;//校验初始值
    for(int i=0; i < DataLenth;i++) uCRC^=Data[i];

    适用范围:适用于大多数要求不高的数据通讯。

    应用例子:ic卡接口通讯、很多单片机系统的串口通讯都使用。

    5.crc循环冗余校验(Cyclic Redundancy Check)
    实现方法:这是利用除法及余数的原理来进行错误检测的.将接收到的码组进行除法运算
    ,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错。crc校验
    具还有自动纠错能力。

    CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
    工作原理
    循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码。
    对应关系
    多项式和二进制数有直接对应关系:X的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:X的最高幂次为R,转换成对应的二进制数有R+1位。
    多项式包括生成多项式G(X)和信息多项式C(X)。
    如生成多项式为G(X)=X4+X3+X+1, 可转换为二进制数码11011。
    而发送信息位 101111,可转换为数据多项式为C(X)=X5+X3+X2+X+1。
    生成多项式
    是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
    在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接收方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
    应满足以下条件:
    A、生成多项式的最高位和最低位必须为1。
    B、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。
    C、不同位发生错误时,应该使余数不同。
    D、对余数继续做除,应使余数循环。
    校验码位数
    CRC校验码位数 = 生成多项式位数 - 1。注意有些生成多项式的简记式中将生成多项式的最高位1省略了。
    生成步骤
    1、将X的最高次幂为R的生成多项式G(X)转换成对应的R+1位二进制数。
    2、将信息码左移R位,相当于对应的信息多项式C(X)*2R。
    3、用生成多项式(二进制数)对信息码做除,得到R位的余数(注意:这里的二进制做除法得到的余数其实是模2除法得到的余数,并不等于其对应十进制数做除法得到的余数。)。
    4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。
    【例】假设使用的生成多项式是G(X)=X3+X+1。4位的原始报文为1010,求编码后的报文。
    解:
    1、将生成多项式G(X)=X3+X+1转换成对应的二进制除数1011。
    2、此题生成多项式有4位(R+1)(注意:4位的生成多项式计算所得的校验码为3位,R为校验码位数),要把原始报文C(X)左移3(R)位变成1010 000
    3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除(高位对齐),相当于按位异或:
    1010000
    1011
    ———–】
    0001000
    0001011
    ———-】
    0000011
    得到的余位011,所以最终编码为:1010 011
    原则
    若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得
    V(x)=A(x)g(x)=xRm(x)+r(x);
    其中: m(x)为K次原始的信息多项式, r(x)为R-1次校验多项式(即CRC校验和),
    g(x)称为生成多项式:
    g(x)=g0+g1x1+ g2x2+…+g(R-1)x(R-1)+gRxR
    发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。
    生成方法
    借助于模2除法则,其余数为校验字段。
    例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1
    假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001
    x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;
    采用模2除法则: 得余数为: 1010(即校验字段为:1010)
    发送方:发出的传输字段为: 1 0 1 1 0 0 1 1010
    信息字段 校验字段
    接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)
    如果能够除尽,则正确,
    给出余数(1010)的计算步骤:
    除法没有数学上的含义,而是采用计算机的模二除法,即除数和被除数做异或运算。进行异或运算时除数和被除数最高位对齐,按位异或。
    10110010000
    ^11001
    ————————–】
    01111010000
    1111010000
    ^11001
    ————————-】
    0011110000
    11110000
    ^11001
    ————————–】
    00111000
    111000
    ^11001
    ——————-】
    001010
    则四位CRC校验码就为:1010。
    利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数共k+r位,然后发送出去。在接收端,根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。这个规则,在差错控制理论中称为“生成多项式”。

    crc检验主要有计算法和查表法两种方法,网上很多实现代码。

    适用范围:CRC-12码通常用来传送6-bit字符串;CRC-16及CRC-CCITT码则用是来传送
    8-bit字符。CRC-32:硬盘数据,网络传输等

    应用例子:rar,以太网卡芯片、MPEG解码芯片中

    6.md5校验和数字签名
    实现方法:主要有md5和des算法。

    适用范围:数据比较大或要求比较高的场合。如md5用于大量数据、文件校验,des用于保
    密数据的校验(数字签名)等等。

    应用例子:文件校验、银行系统的交易数据

    7.海明码校验
    将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。实质上,海明校验是一种多重校验。
    假设为k个数据位设置r个校验位,则校验位能表示2^r个状态,可用其中的一个状态指出 “没有发生错误”,用其余的2 ^r -1个状态指出有错误发生在某一位,包括k个数据位和r个校验位,因此校验位的位数应满足如下关系:
    2^r ≥ k + r + 1 (2.7)
    如要能检出与自动校正一位错,并能同时发现哪位错,此时校验位的位数r和数据位的位数k应满足下述关系:
    2^r-1 ≥ k + r (2.8)
    按上述不等式,可计算出数据位k与校验位r的对应关系,如表2.2所示。
    表2.2
    k值 最小r值
    2~4 3
    5~11 4
    12~26 5
    27~57 6
    58~120 7
    分组原则
    编辑
    在海明码中, 位号数(1、2、3、……、n)为2的权值的那些位,即:
    1(2^0)、2(2^1)、4(2^2)、8(2^3)、…2^(r-1)位,作为奇偶校验位,并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。例如: N=11(海明码位数)K=7(数据位数)r=4(校验位) ,相应海明码可表示位号为: 1, 2, 3, 4 ,5 ,6, 7, 8, 9 ,10 ,11,校验位P占第1,2,4,8位,其他位为有效信息位,海明码中的校验位分别标示为P1,P2,P3,P4… Pr ,并被信息位中的一至若干位所校验,其规律是:第i位,由校验位位号之和等于i的那些校验位所校验,如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验,海明码的位号为5,它被P1P3(位号分别为1,4)所校验。归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。
    设计海明码编码的关键技术,是合理地把每个数据位分配到r个校验组中,以确保能发现码字中任何一位出错;若要实现纠错,还要求能指出是哪一位出错,对出错位求反则得到该位的正确值。例如,当数据位为3位(用D3 D2 D1表示)时,检验位应为4位(用P4 P3 P2 P1表示)。可通过表2.3表示的关系,完成把每个数据位划分在形成不同校验位的偶校验值的逻辑表达式中。
    表2.3 校验位与数据位的对应关系
    在P1、P2、P3、P4竖列相应行分别填1,
    在该4列的低3横行其它位置分别填0,
    在最顶横行的每个尚空位置都分别填1。
    若只看低3横行,右4竖列的3个bit的组合值分别为十进制的1、2、4、0,则分配 D1 D2 D3列的组合值为3 5 6,保证低3横行各竖列的编码值各不相同。
    表中D3 D2 D1为三位数据位,P4 P3 P2 P1为四位校验位。其中低三位中的每一个校验位P3 P2 P1的值,都是用三个数据位中不同的几位通过偶校验运算规则计算出来的。其对应关系是:对Pi(i的取值为1~3),总是用处在Pi取值为1的行中的、用1标记出来的数据位计算该Pi的值。最高一个校验位P4,被称为总校验位,它的值,是通过对全部三个数据位和其它全部校验位(不含P4本身)执行偶校验计算求得的。
    形成各校验位的值的过程叫做编码,按刚说明的规则,4个校验位所用的编码方程为:
    P4 = D3 D2 D1 P3 P2 P1
    P3 = D3 D2
    P2 = D3 D1
    P1 = D2 D1
    由多个数据位和多个校验位组成的一个码字,将作为一个数据单位处理,例如被写入内存或被传送走。之后,在执行内存读操作或在数据接收端,则可以对得到的码字,通过偶校验来检查其合法性,通常称该操作过程为译码,所用的译码方程为:
    S4 = P4 D3 D2 D1 P3 P2 P1
    S3 = P3 D3 D2
    S2 = P2 D3 D1
    S1 = P1 D2 D1
    对应关系
    编辑
    译码方程和编码方程的对应关系很简单。译码方程,是用一个校验码和形成这个校验码的编码方程执行异或,实际上是又一次执行偶校验运算。通过检查四个S的结果,可以实现检错纠错的的目的。实际情况是,当译码求出来的S4、S3、S2、S1的得值与表2.3中的那一列的值相同,就说明是哪一位出错;故人们又称表2.3为出错模式表。若出错的是数据位,对其求反则实现纠错;若出错的是校验位则不必理睬。举例如下:
    任何一位(含数据位、校验位)均不错,则四个S都应为0值;
    任何单独一位数据位出错,四个S中会有三个为1;如D3错,则S4 S3 S2 S1为1110。
    若单独一位校验位出错,四个S中会有一个或两个为1;如P1错,S4 S3 S2 S1为1001,如P4错,S4 S3 S2 S1为1000。
    任何两位(含数据位、校验位)同时出错,S4一定为0,而另外三个S位一定不全为0,此时只知道是两位同时出错,但不能确定是哪两位出错,故已无法纠错。如D1、 P2出错,会使S4 S3 S2 S1为0001。请注意,S4的作用在于区分是奇数位出错还是偶数位出错,S4为1是奇数位错,为0是无错或偶数位错。这不仅为发现两位错所必需,也是为确保能发现并改正一位错所必需的。若不设置S4,某种两位出错对几个S的影响与单独另一位出错可能是一样的(不必花费精力推敲),此时若不加以区分,简单地按一位出错自动完成纠错处理反而会帮倒忙

    展开全文
  • 数据通信中的校验方法

    千次阅读 2017-08-03 11:53:58
    数据后加一位校验位,若数据中“1”的个数为奇数则校验位为0,反之为1 2、CRC 数据:1011001 合成多项式:f(x)=x^6+x^4+x^3+1 发送和接收事先约定多项式:G(x)=x^4+x^3+1,即11001;此多项式可随机取,但首尾必为...
  • Excel相关数据校验方法

    千次阅读 2019-01-08 01:41:56
    使用Excel来收集数据是经常使用的功能。公司开发了一个固定资产系统,IT部门需要给用户初始化一些数据。虽然Excel表格的说明已经写得很清楚并且对用户进行了培训。但是用户在提交这些数据时还是出现了一堆的问题。...
  • 数据校验方法

    千次阅读 2016-11-05 23:37:48
    1.什么是数据校验  通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。 2.最简单的...
  • 每个项目都会有对输入数据做一些简单校验的事情,比如特殊字符过滤、最大最小长度,数字、邮箱等格式验证等等。 这些验证往往在一个项目的很多表单里都有大量重复工作,因此很多前端框架都设计一套通用验证方法,来...
  • 几种常用的数据校验方式

    千次阅读 2018-03-22 15:20:44
    常用的几种数据校验方式有奇偶校验、CRC校验、LRC校验、格雷码校验、和校验、异或校验等。 一、奇偶校验 1. 定义 根据被传输的一组二进制代码中“1”的个数是奇数或偶数来进行校验。 使用:通常专门设置...
  • linux中的数据校验方法

    千次阅读 2016-11-06 22:11:03
    1.什么是数据校验  通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。 2.最简单的...
  • 数据校验的六种方式

    万次阅读 2016-07-18 10:23:02
    数据校验是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,说明数据是完整的。
  • 主要介绍了SpringBoot全局异常与数据校验方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了Struts2中validate数据校验的两种方法及Struts2常用校验器,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
  • 前段时间看到一个项目,里面的校验方式是把各个待校验的字段的校验类型在XML文件里先进行了配置,然后在检验时候,读取文件及校验类型再用反射进行字段的匹配。这样就有一个弊端,就是每当校验一条数据(含有多个...
  • 主要介绍了destoon会员注册提示“数据校验失败(2)”解决方法,需要的朋友可以参考下
  • 网络数据传输的三种校验方法

    千次阅读 2016-11-05 21:54:08
    一、奇偶校验 根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。...奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为
  • antd 的 表单校验方法包括 validateFields 和 validateFieldsAndScroll 里面可以接收校验字段数组, options, 和一个回调函数 from.validateFields([name, age], {}, (err, val)=> {}) 校验全部表单数据 from....
  • 样本t检验 相关分析 回归分析 有序分类的Logistic回归 无序分类的Logistic回归 二分类的Logistic回归 有序分类 单样本秩和检验 单因素方差分析,结果解释时利用有序信息 秩相关分析、CMH x2 可将自/因变量交换后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 817,180
精华内容 326,872
关键字:

数据校验方法