首页 > 其他分享 >CRC校验码

CRC校验码

时间:2023-09-12 11:33:51浏览次数:44  
标签:校验 校验码 CRC 检错 数据 冗余

一、CRC 基础概念

1. 什么是 CRC

     CRC(Cyclic Redundancy Checksum)是一种纠错技术,代表循环冗余校验和。
     数据通信领域中最常用的一种差错校验码,其信息字段和校验字段长度可以任意指定,但要求通信双方定义的CRC标准一致。主要用来检测或校验数据传输或者保存后可能出现的错误。它的使用方式可以说明如下图所示:
     在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。
     为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有 奇偶校验、因特网校验、循环冗余校验 等。

2. 使用方法

     循环冗余校验是一种用于校验通信链路上数字传输准确性的计算方法(通过某种数学运算来建立数据位和校验位的约定关系的 )。
image

     发送方计算机使用某公式计算出被传送数据所含信息的一个值,并将此值 附在被传送数据后,接收方计算机则对同一数据进行 相同的计算,应该得到相同的结果。
     如果这两个 CRC结果不一致,则说明发送中出现了差错,接收方计算机可要求发送方计算机重新发送该数据。

3. 应用领域

     在诸多检错手段中,CRC是最著名的一种。CRC的全称是循环冗余校验,其特点是:检错能力强,开销小,易于用编码器及检测电路实现。从其检错能力来看,它所不能发现的错误的几率仅为0.0047%以下,从性能上和开销上考虑,均远远优于奇偶校验及算术和校验等方式。
     因而,在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC-CCITT,WinRAR、NERO、ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。

二、CRC 校验原理

     CRC原理:在K位信息码(目标发送数据)后再拼接R位校验码,使整个编码长度为N位,因此这种编码也叫(N,K)码。
     通俗的说,就是在需要发送的信息后面附加一个数(即校验码),生成一个新的发送数据发送给接收端。这个数据要求能够使生成的新数据被一个特定的数整除。这里的整除需要引入模 2除法的概念。

1. CRC校验流程

  1. 选定一个标准除数(K位二进制数据串)
  2. 在要发送的数据(m位)后面加上K-1位0,然后将这个新数(M+K-1位)以模2除法的方式除以上面这个标准除数,所得到的余数也就是该数据的CRC校验码(注:余数必须比除数少且只少一位,不够就补0)
  3. 将这个校验码附在原m位数据后面,构成新的M+K-1位数据,发送给接收端。
  4. 接收端将接收到的数据除以标准除数,如果余数为0则认为数据正确。

2. CRC校验中有两个关键点

一是要预先确定一个发送端和接收端都用来作为除数的二进制比特串(或多项式);
二是把原始帧与上面选定的除进行二进制除法运算,计算出FCS。

3. 常见的CRC算法

     虽然CRC可以任意定义二项式、数据长度等,但没有一个统一的标准的话,就会让整个计算变得非常的麻烦。但实际上,不同的厂家经常采用不同的标准算法,这里列出了一些国际常用的模型表:

名称 多项式 表示法 应用举例
CRC-8 X8+X2+X+1 0X107
CRC-12 X12+X11+X3+X2+X+1 0X180F telecom systems
CRC-16 X16+X15+X2+1 0X18005 Bisync, Modbus, USB, ANSI X3.28, SIA DC-07, many others; also known as CRC-16 and CRC-16-ANSI
CRC-CCITT X16+X12+X5+1 0X11021
CRC-32 X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1 0x104C11DB7 ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS
CRC-32C X32+X28+X27+X26+X25+X23+X22+X20+X19+X18+X14+X13+X11+X10+X9+X8+X6+1 0x11EDC6F41 iSCSI, SCTP, G.hn payload, SSE4.2, Btrfs, ext4, Ceph

三、循环冗余的计算

Reference

  1. 一文讲透CRC校验码-附赠C语言实例 @ 知乎
  2. CRC在线校验工具

标签:校验,校验码,CRC,检错,数据,冗余
From: https://www.cnblogs.com/uestc-mm/p/17689844.html

相关文章

  • 循环冗余校验(CRC)算法入门引导
    写给嵌入式程序员的循环冗余校验(CRC)算法入门引导前言CRC校验(循环冗余校验)是数据通讯中最常采用的校验方式。在嵌入式软件开发中,经常要用到CRC算法对各种数据进行校验。因此,掌握基本的CRC算法应是嵌入式程序员的基本技能。可是,我认识的嵌入式程序员中能真正掌握CRC算法的人却很少,......
  • 二进制CRC校验码生成程序
      /**二进制CRC序列生成程序*/#include<stdio.h>#include<string.h>#defineLEN_DIVIDEND30#defineLEN_DIVISOR30#defineLEN_SEQUENCELEN_DIVIDEND+LEN_DIVISORvoidCRC(char*,char*,char*);voidMOD2_div(char*,char*,char*);voidmove(char*,int);intmai......
  • 每日一个软考知识点之【CRC校验】
    CRC校验的原理(此图引用自知乎)发送方可以通过一定的算法生成校验位,然后接收方通过相同的算法验证一边,确保数据的真实性完整性。 几个重要的概念POLY:可以多项式表达,也可以用2进制或者16进制来表达,比如说多项式为G(x)=x^5+x^3+x+1,用二进制显示就是101011,用十六进制......
  • 使用C#配合modbus协议的16进制代码生成crc16校验码的计算方法
    前言在网上也是查看了很多关于crc16校验的文章,但是好像都是对于有基础的人看的,我当时拿起直接使用,发现行不通,这对于零基础的不是很友好,所以决定贡献一篇,哈哈哈哈~~~publicuintCalcCRC16(stringhexCommand){byte[]pBuf=HexStringToByteArray(......
  • Java计算CRC16校验码
    废话不多说,直接上代码/***计算CRC16校验码**@parambytes需要计算的字节数组*/publicstaticbyte[]getCRCByteArray(byte[]bytes){//ModBus通信协议的CRC(冗余循环校验码含2个字节,即16位二进制数。//......
  • CRC校验
    #regionCRC校验privatestaticreadonlybyte[]aucCRCHi={0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x00......
  • 结直肠癌常识 | Colorectal cancer | CRC
     目录:临床:消化道的具体结构?小肠、大肠、结肠、直肠的概念?CRC的左侧和右侧的差别?什么是polyps、lesion、tumor、cancer,这之间的区别是什么?Nonneoplastic、Neoplastic;adenomasandserrated什么是CRC,临床上如何界定?在各个肠道部位的分布比例?CRC是如何分期的?TNM分期是什么?各......
  • CRC循环冗余校验计算过程
    储备知识:同或运算(同0异1)异或运算(同1异0)CRC校验中,多项式可表示为\((\sum_{i=1}^{j}C_iX^i)+1,C=0,1\)注:使用多项式算术是为了在进行二进制计算时无需考虑进位问题CRC中用到的除数,由多项式的各项系数组成运算举例:设多项式为X6+X4+X2+X+1,进行校验的数据设为1101011011可得......
  • 三菱通过485bd板 CRC指令通讯示例 不含详细校验程序。
    三菱通过485bd板CRC指令通讯示例不含详细校验程序。所需硬件:三菱FX3Uplc,FX3U485BD通讯板,台达VFD-M变頻器。可以实现的功能:控制方面,正反转停止,頻率设定;读取运行状态、运行頻率、頻率指令、运行电流。内容包括plc程序,触摸屏程序,变頻器参数设置,通讯接线,视频教程。另外说明,别......
  • 身份证校验码:计算方法
    来源: 身份证校验码:计算方法 ......