循环冗余校验码

By | 10月06日
Advertisement

循环冗余校验码

  CRC(Cyclic Redundancy Check)循环冗余校验码
  是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,书上提到红军和蓝军通信联合进攻山下的敌军的例子,第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢贸然行动。
  对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。
  CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。 它的编码规则是:
  1、首先将原信息码(kbit)左移r位(k+r=n)
  2、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。
  非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:
  0+0=1+1=0,1+0=0+1=1
  即‘异’则真,‘非异’则假。
  由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’直值表完全相同。
  有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。
  例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是:
  对于g(x)=x4+x3+x2+1的解释:(都是从右往左数)x4就是第五位是1,因为没有x1所以第2位就是0。
  11101 | 110,0000(设a=11101 ,b=1100000)
  取b的前5位11000跟a异或得到101
  101加上b没有取到的00得到10100
  然后跟a异或得到01001
  也就是余数1001
  余数是1001,所以CRC码是110,1001
  标准的CRC码是,CRC-CCITT和CRC-16,它们的生成多项式是:
  CRC-CCITT=x^16+x^12+x^5+1
  CRC-16=x^16+x^15+x^2+1

Similar Posts:

  • 循环冗余校验码CRC算法的C++实现 - IaWeN's Blog-iawen,原创,安全,破解视频,网页设计,影视后期,AE特效 - 我喜欢这样自由的随

    循环冗余校验码CRC算法的C++实现 - IaWeN's Blog-iawen,原创,安全,破解视频,网页设计,影视后期,AE特效 - 我喜欢这样自由的随手涂鸦,因为我喜欢风--

  • UVa 128 Software CRC (模计算&CRC循环冗余校验码)

    128 - Software CRC Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=64 You work for a company which uses lots of personal computers. Your boss, Dr Penny P

  • CRC校验程序1:CRC循环冗余校验码计算

    CRC全称Cyclic Redundancy Check,中文称为循环冗余检查.它是一种数据传输检错的机制,能够对数据进行多项式计算,并将得到的结果与接收设备共享,保证数据传输的正确性和完整性. 算法流程如下: 1. Load a 16-bit register with FFFF hex (all ‘1’s). Call this the CRC register. 2. Exclusive OR the first 8-bit byte of the message with the low

  • 循环冗余校验检错方案(CRC)

    循环冗余校验检错方案(CRC) 1.crc校验原理 crc校验的根本思想就是在要发送的帧后面附加一个二进制序列,生成一个新帧发送给接收端.当然,这个附加的数不是随意的,它要使生成的新帧能与发送端和接收端共同选定的某个特定数整除,需要注意的是,这里不是采用的二进制除法,而是采用"模2除法".到达接收端后,再把接收到的新帧除以(模2除)这个选定的除数.因为在发送端已经通过附加一个数做了去余处理,故得出的结果应该没有余数.如果出现了余数,则说明在传输的过程中出现了差错. [说明]"

  • 关于CRC循环冗余校验的总结(C#)

    1. 实验要求 (1)通过CRC(循环冗余校对)序列的计算,掌握C#语言中类的静态方法与动态方法的区别. (2)Shell与Windows Form 的通信作为扩展提高内容. 2. 实验内容 主要工作是:设计算法实现CRC序列的计算 CRC的计算过程总结如下: 1. 设置CRC寄存器,并给其赋值0xffff: 2. 读数据文件,并将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把 结果存入到CRC寄存器中. 3. 将CRC寄存器的数据右移一位,高位补零,并检查溢出位. 4.

  • 循环冗余校验算法CRC32

    uint32 crc32_tab[] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148,

  • CRC码计算及校验原理的最通俗诠释

    在上一篇发布了我的最新著作<深入理解计算机网络>一书的原始目录(http://blog.csdn.net/lycb_gz/article/details/8199839),得到了许多读者朋友的高度关注和肯定,本篇接着发一篇关于CRC码校验原理和CRC码计算方面的通俗诠释的试读文章.本书将于12月底出版上市,敬请留意!! 5.3.2 循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误. 1. CRC校验原理

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

    计算机系统运行时,各个部之间要进行数据交换. 为确保数据在传送过程正确无误,常使用检验码. 我们常使用的检验码有三种. 分别是奇偶校验码.海明校验码和循环冗余校验码(CRC). 奇偶校验码 奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶校验码无法检测出哪位出错.所以属于无法矫正错误的校验码.奇偶校验码是奇校验码和偶校验码的统称. 它们都是通过在要校验的编码上加一位校验位组成. 如果是奇校验加上校验位后,编码中1的个数为

  • Redis源码中的CRC校验码(crc16、crc64

    本文基于Github上的开发版.稳定版Redis 2.8中并无crc16.c文件,该文件后被收录到Redis 3.0版本中. 在阅读Redis源码的时候,看到了两个文件:crc16.c.crc64.c.下面我抛砖引玉,简析一下原理. CRC即循环冗余校验码,是信息系统中一种常见的检错码.大学课程中的"计算机网络"."计算机组成"等课程中都有提及.我们可能都了解它的数学原理,在试卷上手工计算一个CRC校验码,并不是难事.但是计算机不是人,现实世界中的数学原理需要转化为

  • MySQL5.6一主多从的半同步复制实例

    半同步简介: 在默认情况下,MySQL的复制是异步的,这意味着主服务器及其从服务器是独立的.异步复制可以提供最佳的性能,因为主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,无需等待验证更新数据是否已经复制到从服务器中,就可以自由处理其它进入的事务处理请求.但这也同时带来了很高的风险,如果在主服务器或从服务器端发生故障,会造成主从数据的不一致,甚至在恢复时造成数据丢失. 从MySQL5.5开始引入了一种半同步复制功能,该功能可以确保主服务器和访问链中至少一台从服务器之间的数据一致

Tags: