最好懂的CRC校验规则讲解

article/2025/9/27 14:31:10

文章目录

  • 前言
  • 何为校验
  • 如何生成CRC校验码
  • 按字节位反转
  • 确定左移多少位
  • 生成多项式的数值式
  • 模二除法
  • 其它说明

前言

  • CRC校验的原理非常复杂,但是用起来却很简单,甚至别人写好了函数,直接拿来调用即可,但是我们还是需要了解一点这个校验码是如何计算得来的
  • 网上的教程一大堆,但是很多讲的太深入,让人看的云里雾里,不明所以,所以我才想写一个高中生都能看懂的,不那么深入的,专注于应用的,通俗易懂的CRC校验的解释

何为校验

比如我写了一封电子邮件给你,它是用二进制写的,比如说是1010 1010

当你收到的时候,发现信息是1010 1011

很明显最后一位被篡改了,但是你如何知道接收的信息是否有问题呢,这就需要校验机制

使用校验机制的结果,就是在要发送的数据之后,再接着发一串校验码

在串口通信中用的最多的就是奇偶校验,所谓奇偶校验,其实是两种校验方式,一种叫奇校验,一种叫偶校验,它们有什么区别呢

  • 奇校验:要发送的二进制数据中,保证1的个数为奇数,如果有效信息有偶数个1,则校验位为1
  • 偶校验:要发送的二进制数据中,保证1的个数为偶数,如果有效信息有奇数个1,则校验位为1

如果刚刚我要发的电子邮件,采用偶校验,那么1010 1010中1的个数为4,是偶数,所以最后校验位是0,所以最终发送出去的数据是1010 1010 0

CRC校验也是如此,它会在原始数据的末尾,再加上一串校验位,这串校验位是利用原始数据,通过固定的算法计算得到的,发送方和接收方,都遵循同样的算法,如果传输过程无误,接收方收到的信息没有被篡改,则接收方可以利用这个算法,计算出校验码,再去跟发送方的校验码进行比较,相同的话则认为接收的数据没有问题(你可以这样去理解,但是实际它不是这样做的)

如何生成CRC校验码

还是上面的例子,要发送的信息为1010 1010,十六进制为0xAA

采用CRC-4/ITU校验,校验码长度4位

在这里插入图片描述

可以看到得到的结果是1011,计算这个结果的过程很复杂,我先大致介绍怎么得到这个结果,后面再详细解释计算过程

  • 先将1010 1010原始信息码按字节位反转,得到0101 0101
  • 将位反转后的结果左移4位, 空出校验码的位置,得到0101 0101 0000
  • CRC-4/ITU的生成多项式是x^4 + x + 1,对应二进制是10011
  • 进行模二除法运算,被除数是0101 0101 0000,除数是10011,最终得到余数1101
  • 将余数进行按字节位反转,得到1011,这就是最终校验码的结果

上面的过程可能不太好懂,所以我后面会详细解释

按字节位反转

反转其实很简单,例如一段文字“张三李四王五”,反转之后就是“五王四李三张”

一段二进制“1010 0111”,反转过来就是“1110 0101”

至于按字节反转,其实是考虑到如果要校验的信息很长,有多个字节,例如“0101 1101 1010 1001”

它有两个字节,就要在每个字节内做反转,但是字节与字节之间的前后位置,是不变的

“0101 1101 1010 1001”按字节反转后,得到“1011 1010 1001 0101”

确定左移多少位

左移的位数跟采用的CRC算法类型有关系,CRC校验有很多种算法,下面举几个例子

名称生成多项式数值式
CRC-4x4+x+11 0010
CRC-8x8 +x5+x4+11 0011 0001
CRC-12x12+x11+x3+x2+x+11 1000 0000 1111
CRC-16x16+x15+x2+11 1000 0000 0000 0101

其实生成多项式可以是多种多样的,比如说CRC-8的生成多项式,其实并不是只有这一种,但是所有的生成多项式都要遵循一些基本的规定,具体怎么规定,就不细说了,你确定了要采用哪种CRC校验后,知道要去网上查表找它的生成多项式就行了

从表中可以看出,CRC-4,它的x4一定是存在的,同样的,CRC-8,它是x8一定是存在的,这个数值4或者8,就是这种校验方式最后生成校验码的位数

知道了校验码位数,就知道了需要左移多少位

生成多项式的数值式

以上的表中,还有一项是数值式,它是将多项式的系数提取出来,组成一串二进制的数
例如CRC-4

名称生成多项式数值式
CRC-4x^4 + x + 110011

生成多项式里面,有很多项是系数0,如果把它写完整,将会是

1 * x^4 + 0 * x^3 + 0 * x^2 + 1 * x ^1 + 1 * x^0

提取多项式的系数,得到10011

模二除法

所谓模二除法,本质上是异或运算,这里用xor表示异或

0 xor 0 = 0
1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1

发现异或运算的规律了吗,相同则为0,相异则为1

下面来计算刚刚的例子,0101 0101 0000 模二除 10011

第一步先写好被除数和除数
在这里插入图片描述

第二步,将除数写到下面,进行异或运算
如果被除数的最高位为0,那么除数要放的位置,就要往右移,每次计算前,都要看被除数最高位是不是0,这步操作因为最高位是1,所以除数放的位置右移了1位
进行异或运算,就是上下对应的每一位,都按异或进行计算,不需要考虑借位、进位等问题
这一步得到的结果是110,为了做下一步运算,把被除数后面的位依次拿下来,得到11001
在这里插入图片描述

然后,重复第二步的操作,直到除尽,得到最终的余数为1101
在这里插入图片描述

将这个数按字节位反转,得到1011,这便是最终的校验码

其它说明

在这里插入图片描述

在选择一种CRC校验方式之前,一定要知道它有哪些具体规定,例如CRC-4/ITU,它的输入和输出数据反转,是被强制勾选的,所以计算的时候要格外注意

如果是做题,会发现很多规定,例如这个反转,在题目里面是没有的,根本不需要做这个操作,所以自己一定要看清楚它的要求


http://chatgpt.dhexx.cn/article/0ronyX2S.shtml

相关文章

CRC校验原理及代码

参考:CRC校验原理及步骤https://blog.csdn.net/d_leo/article/details/73572373 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查&am…

CRC 校验计算

一、简介 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。 其根本思想就是先在要发送的帧后面附加校验码,再发送给接收端。…

如何进行CRC校验

为了保证数据传输的可靠性,计算机网络传输数据时,必须采用差错检验措施,数据链路层广泛应用了循环冗余检验CRC(Cyclic Redundancy Check)的检错技术。 基本原理: CRC检验原理实际上就是在一个p位二进制数…

CRC校验(个人小结)

前言 之前曾经在通信原理课程学习过、也在项目中使用软件模拟过CRC校验。但是仍然有许多困惑的地方,在网上找的资料也是零零散散,于是自己根据课程学习、项目实践以及网上的资料,做一个小结。不当之处请在评论区指出。推荐一个CRC在线校验工…

CRC码校验纠错原理

在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而…

CRC校验详解(附代码示例)

目录 1.CRC校验原理 2.生成多项式 3.以CRC-16校验为例讲解编程实现 3.3.1 完全按照CRC原理实现校验 3.3.2 工程中常用CRC校验过程 3.3.3 改进的CRC校验过程 4.以CRC-8校验为例讲解查表法 5.以CRC-16校验为例讲解查表法 5.1.生成表格 5.2.查表法实现 6.代码链接 CRC校…

详述CRC校验码(附代码)

关注星标公众号,不错过精彩内容 来源 | 一口Linux CRC校验应用比较广泛,通常在通信领域用的比较多,即便是自定义通信协议,也可以添加CRC校验码,使其通信更加可靠。 今天就来进一步描述CRC校验码。 一、CRC概念 1. 什么…

【科普】CRC校验(一)什么是CRC校验?

目录 CRC(循环冗余校验) CRC 校验码的生成 CRC 的发送方与接收方 发送方 接收方 除法异或运算示意图 CRC(循环冗余校验) CRC(Cyclic Redundancy Check)循环冗余检验,是一种用于检测数字数…

CRC校验原理及其C语言实现

文章目录 目录前言CRC算法简介CRC参数模型CRC计算CRC校验CRC计算的C语言实现CRC计算工具总结参考资料 目录 前言CRC算法简介CRC计算CRC校验CRC计算的C语言实现CRC计算工具总结 前言 最近的工作中,要实现对通信数据的CRC计算,所以花了两天的时间好好研…

Oracle Toad 导数,麒峰

标签: 补丁下载 x86 ia64 操作系统 迅雷下载 oracle it (2011-05-26 10:28) 标签: 授予的权限 主键约束 对象 角色管理 数据字典 oracle it 系统权限: create table :create any table: drop table: create procedure: execute anycedure: cr…

最优捕捞

一、问题重述 为了保护人类赖以生存的自然环境,可再生资源(如渔业、林业资源)的开发必须适度。一种合理、简化的策略是,在实现可持续收获的前提下,追求最大产量或最佳效益。 假设这种鱼分4个年龄组:称1龄…

短期趋势自用经传捕捞季节 通达信指标公式副图 源码 贴图

指标公式描述 短期趋势自用经传捕捞季节 通达信指标公式副图 源码 贴图 图示: 指标源码: WY1001:(2*CLOSEHIGHLOW)/4; WY1002:EMA(WY1001,2); WY1003:EMA(WY1002,2); WY1004:EMA(WY1003,2); XYS0:(WY1004-REF(WY1004,1))/REF(WY1004,1)*100; STICKLINE(XYS0>0,X…

股票指标使用 - 捕捞季节

股票指标里面我觉得这个指标是最实用的了,XX软件里面流行起来的。作为IT男,任何带有逻辑运算的都会让我感兴趣。 接下来就用简单易懂的文字介绍下这个指标怎么看(百度上搜到的都说了那么深奥) 如图: 优势:相对MACD指标来说&…

捕捞季节 通达信副图指标公式 源码

捕捞季节是一个趋势型指标,主要用于(超)短线的股价运行趋势状态监控。捕捞季节通达信指标公式主要用途是用来做短期买卖点操作的指标公式,适合那些做短期买卖的股民。 【指标用法】 紫色线上穿黄色线为金叉买入信号,…

通达信指标:捕捞季节

通达信【捕捞季节】指标 WY1001:(2CLOSEHIGHLOW)/3; WY1002:EMA(WY1001,3); WY1003:EMA(WY1002,3); WY1004:EMA(WY1003,3); XYS0:(WY1004-REF(WY1004,1))/REF(WY1004,1)100; STICKLINE(XYS0>0,XYS0,0,2,0),COLORRED; STICKLINE(XYS0<0,XYS0,0,2,0),COLORGREEN; PJGJ:AMO…

x86服务器与arm服务器

服务器是提供计算服务的设备&#xff0c;服务器的构成包括处理器、硬盘、内存、系统总线等&#xff0c;和通用的计算机架构类似&#xff0c;但是由于需要提供高可靠的服务&#xff0c;因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。在网络环境下…

服务器 raid配置

这里写目录标题 首先启动Server在启动界面&#xff0c;按键盘ESC或Del键进入BIOS。设置启动模式为“LEGACY”传统模式&#xff0c;F4 保存并退出重启服务器。ctrlA进入raid配置 首先启动Server在启动界面&#xff0c;按键盘ESC或Del键进入BIOS。 设置启动模式为“LEGACY”传统模…

TaiShan服务器介绍

TaiShan服务器系列介绍 TaiShan 100服务器2016年 基于Kunpeng916处理器 最多16各DDR4内存 支持5个PCIe 3.0扩展插槽 支持SAS/SATA硬盘和SSD 支持板载GE/10GE网络 TaiShan 200服务器2019年 基于Kunpeng 920处理器 最多支持32个DDR4内存 支持最多8个PCLe 4.0扩展插槽 支持NVMe …

中国服务器销售排名,IDC Q3:华为FusionServer Pro智能服务器发货量、销售额荣登中国区x86标准服务器排名双冠王...

据IDC发布的《中国区服务器季度跟踪报告》显示&#xff0c;2020年第三季度中国区x86标准服务器市场(标注1)&#xff0c;华为FusionServer pro智能服务器发货量及销售额双居中国区第一(标注2)&#xff0c;其中机架、高密型号服务器&#xff0c;均列单品类发货量、销售额第一&…

华为x86服务器年销售额,卖了荣耀后,华为又要卖资产?这次是国内第2的X86服务器...

去年11月份&#xff0c;华为将荣耀卖了&#xff0c;从那以后荣耀独立了&#xff0c;开始了自由发展。 为何要卖荣耀&#xff0c;其实大家都知道的&#xff0c;华为把荣耀拿在手中&#xff0c;只能是等死&#xff0c;因为没有足够的芯片供应&#xff0c;荣耀无法推出新手机&…