目录

CRC(循环冗余校验)

CRC 校验码的生成

CRC 的发送方与接收方

发送方

接收方

除法异或运算示意图


CRC(循环冗余校验)

CRC(Cyclic Redundancy Check)循环冗余检验,是一种用于检测数字数据错误的技术。作为一种校验和类型,CRC 根据文件或更大数据集的构建生成固定长度的数据集。就其用途而言,CRC是一种哈希函数,用于检测数字电信网络和硬盘驱动器等存储设备中常用的原始计算机数据的意外更改。

在循环冗余校验中,固定数量的校验位被附加到需要传输的消息中。数据接收器接收数据,并检查检查位是否有任何错误。在数学上,数据接收器通过查找所传输内容的多项式除法的其余部分来评估附加的检查值。如果似乎发生了错误,则会发送否定确认,要求重新传输数据。

循环冗余检查也适用于硬盘等存储设备。在这种情况下,检查位将分配给硬盘中的每个块。当计算机读取损坏或不完整的文件时,将触发循环冗余错误。CRC 可以来自其他存储设备或 CD/DVD。错误的常见原因包括系统崩溃,文件不完整或损坏,或者有很多错误的文件。

CRC多项式设计取决于应该受到保护的块的长度。错误保护功能也可以决定CRC设计。可用于CRC实施的资源可能会对性能产生影响。理解CRC的另一种方法是查看其名称中的特定单词。专家指出,CRC被称为“冗余”,因为它增加了数据集的大小而没有添加新信息,而“周期性”则因为它适用于周期性实施系统。

如前所述,指出CRC是一种特定类型的校验和也是有帮助的,其中任意大小的数据集映射到固定大小的字符串,可以将其称为哈希函数。相比之下,校验和本身可能非常简单 , 例如,基元校验和可以只是相关字节值的总和。使用其周期性设置的CRC通常被认为是检查错误和验证数据完整性的一个非常好的策略。它是校验和使用和散列以及一般文件检查中不断发展的工具包的一部分。

CRC 校验码的生成

CRC校验码的生成主要包含以下过程:

  1. 找到除数的长度,这个除数是我们自己定义的。
  2. 除数的位数减一为CRC校验码的位数,假设除数的位数为5,则校验码的位数为4,对被除数也就是需要传递的信息的数后面加上校验码的位数的0,如果校验码的位数为4,则在被除数后面直接加上4个0
  3. 执行除法操作,将加上4个0的被除数作为新的被除数,除以我们定义的除数,除法操作完成后,会得到两个结果:一个是商,另一个是余数。(注意:除法运算采用异或运算)
  4. 得到的余数即使我们要的 CRC 校验码

CRC 的发送方与接收方

发送方

发送方给出需要传递的数据(Data),并定义多项式(polynomial),以多项式得到(n+1)位除数(divisor),对数据的末尾补上n位0,作为被除数,用除数去除被除数,得到的余数就是所需要计算的n位CRC校验码,将得到的CRC校验码拼接到原始数据的末端生成新的数据,将这个数据一并传给接收方。

接收方

接收方需要做的事就更简单一些,将得到的一整块数据作为被除数,用在发送方得到的除数去除被除数,如果结果余数为0的话,代表数据的传输没有出错,得到的数据事正确且有效的。

接收方还有另外一种方法,即使发送方分别发送数据和CRC数据,结束方得到数据末尾补n个0作为被除数,用多项式除数去除被除数,得到的余数如果作为接收方的CRC校验码,如何接收方得到的CRC数据和发送方发的CRC一致的话,同样也可以证明数据的传输是没有问题的。

除法异或运算示意图

可以看到图中,我们所要传递的信息为100100,也就是被除数,我们自定义的除数为1101,它的位数为4,因此要在被除数后面加上3个0,然后进行除法异或运算,最终得到的商为111101,得到的余数为001,根据前面的定义,这个余数001就是我们想要的 CRC 校验码。

然后将生成的 CRC 校验码添加到原被除数的后面,也即是100100后面补上001得100100001,这就是我们要发送的新的数据信息包含了 CRC 校验码,接收端就可以进行相应的解析。

更具体的CRC校验码的计算方法可以参考一位B站up主的教学视频

[CRC校验]手算与直观演示

将自定义的多项式以电路的形式展现,原始数据加上相应位数的0,依次进入到电路当中,最终生成的就是我们所需的CRC校验码。更详细的计算方法可以在视频中学习。

【科普】CRC校验(一)什么是CRC校验?相关推荐

  1. 蓝牙:CRC原理详解(附crc16校验代码)

    CRC原理详解(附crc16校验代码) 参考链接: https://www.cnblogs.com/esestt/archive/2007/08/09/848856.html Cyclic Redun ...

  2. CRC校验原理及CRC-8简单校验函数设计

    CRC校验原理及CRC-8简单校验函数设计 CRC为循环冗余校验码,是一种常用的.具有检错.纠错能力的校验码.通常发送方在发送的数据之后,附上其CRC校验码.接收方收到数据后,也做同样的CRC校验,得 ...

  3. 进制转换及如何求校验码(海明校验码及循环冗余校验CRC码)

    文章目录 前言 一.进制转换 1.1 二进制转换为八进制数和十六进制数 1.2 任意进制数转换为十进制数 1.3 十进制转换为任意进制 二.校验码求取 2.1海明校验码 2.2循环冗余校验CRC码 总 ...

  4. java crc 校验码_java实现CRC校验码

    这两天项目中要使用到CRC校验功能,网上大量的例子是针对c.delphi的例子,前期没有做过,理论上也欠缺很多知识,在这里对java如何实现我们想要的crc校验功能做一下自己的总结,以下内容有本分转自 ...

  5. crc校验matlab编码流程图,crc校验matlab

    关键词: MATLAB;C 语言 ;CRC 循环冗余校验码 2 1.概要 1.1... 结果:出错了 七.思考题 1.掌握按字节编码的过程,试着写出CRC 校验编码的Matlab 程序? %main ...

  6. 异或校验 java_Java生成异或校验码、和校验码、CRC校验码、补码求和校验码四种校验码及校验码匹配工具类...

    Java生成异或校验码.和校验码.CRC校验码.补码求和校验码四种校验码及校验码匹配工具类 /** * 报文校验码验证规则 */ public class Verification { /** * 校 ...

  7. C# CRC16数据校验支持ModelBus和XMODEM校验模式

    C# CRC16数据校验支持ModelBus和XMODEM校验模式 最近在研究C# CRC数据校验规则,之前用过ModelBus模式,但是这次的现场用到的是XMODEM模式,写一篇文章记录实现细节,方 ...

  8. 点分十进制IP校验、转换,掩码校验

    /****************************************************************************** 点分十进制IP校验.转换,掩码校验* 声 ...

  9. 为了进行差错控制,必须对传送的数据帧进行校验。在局域网中广泛使用的校验方法是循环冗余校验。当接收端发现错误后采取的措施是

    为了进行差错控制,必须对传送的数据帧进行校验.在局域网中广泛使用的校验方法是循环冗余校验.当接收端发现错误后采取的措施是 (D) . A.重新计算原始数据 B.报告上层协议 C.自动纠错 D.自动请求 ...

  10. JBPM流程部署校验之java利用XSD校验XML

    JBPM流程定义校验之java利用XSD校验XML 上篇我们学习了在.net中怎样利用XSD来验证xml,今天我们来看一下在java中怎样实现利用xsd来校验xml! /**  *   */ pack ...

最新文章

  1. MFC串口通信上位机(采用静态库编译生成的)不能在其他电脑运行的问题
  2. ITK:遮盖一张图像给定标签图
  3. c/c++永不过时的编程语言
  4. 2021年NBA季后赛第三轮晋级预测
  5. spark sql常用方法
  6. iscsi 挂载教程_CentOS下如何搭建ISCSI以及Windows如何挂载ISCSI镜像
  7. 高德地图车机版缩放版_主图操作-开发指南-高德地图车机版 | 高德地图API
  8. Arduino MAX30102脉搏心率传感器使用教程
  9. 计算机控制面板属性在哪里打开,win7如何打开系统属性面板|win7打开系统属性面板的方法...
  10. python find_peaks 源码理解
  11. 至高心法 - SpringCloud Alibaba (二)Nacos 服务注册与配置中心
  12. Knol of Fabio Maulo
  13. python--批量离线安装python包
  14. linux cp 性能,linux性能监控以及优化之CPU
  15. SpringBoot引入Dubbo问题解析
  16. Win 10 远程桌面连接
  17. ffmpeg 连接抖音三个视频,做电脑桌面
  18. Windows监控——性能指标详解
  19. 神策数据王晓曼:一文详解指标体系的应用与搭建
  20. java39阶台阶_第四届蓝桥杯javaC组_第39级台阶

热门文章

  1. 折半查找表中的偶数问题
  2. signature=9e4f4b0dad18452c0736b320a827b91f,【转】环境科学类外文期刊投稿指南
  3. R——R的基本常用操作
  4. python元组使用什么界定符_python列表与元组的用法
  5. matlab contour与contourf
  6. 公安三维电子沙盘 数字沙盘方案书
  7. Ubuntu 下小米手机驱动
  8. 浅析软件工程中的一些常见设计原则
  9. 高速缓冲器(cache)基本概念
  10. Web项目专项训练——火车车次信息管理系统代码分享