素材来源:网络

编辑整理:strongerHuang

UART有一个奇偶校验,CAN通信有CRC校验。Modbus、MAVlink、USB等通信协议也有校验信息。

在自定义数据存储时,有经验的工程师都会添加一定校验信息。

你平时通信,或者数据存储时,你有用到校验信息吗?下面就介绍几种常见的校验算法。

一、校验和

校验和是最基本,也是嵌入式工程师最常用的一种校验算法,其实现方法很简单,简单到只有几行代码。

实现的方式方法很多,不同的编程语言,不同的应用有所不同,下面以C语言8位校验和为例:uint8_t CheckSum(uint8_t *Buf, uint8_t Len){uint8_t i = 0;uint8_t sum = 0;uint8_t checksum = 0;for(i=0; i

二、异或校验

【异或校验】与【校验和】类似,对数据进行“异或”,最终得到一个“异或值”。uint8_t CheckXOR(uint8_t *Buf, uint8_t Len){uint8_t i = 0;uint8_t x = 0;for(i=0; i

校验和、异或校验的方式有很多种,比如有的还会传入一个参数作为异或校验的值。

当然,以上代码仅供学习参考,实际应用需结合项目情况修改代码。

三、CRC校验

CRC:Cyclic Redundancy Check,即循环冗余校验。

CRC是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。(来自网络)

CRC校验属于冗余校验中的一种,大学学计算机相关专业的同学都应该学过CRC校验(学习时可能没几个同学搞明白了)

CRC有多种变体,比如:CRC-1、 CRC-5-USB、 CRC-8、 CRC-16、 CRC-32、 CRC-64等。其中,在嵌入式领域,CRC-16用的比较多。

常见CRC参数模型:

比如一种在单片机上实现CRC16的源码:uint8_t CRCTAB_H[256] = {/*表省略*/};uint8_t CRCTAB_L[256] = {/*表省略*/};void CRC16(uint8_t *pData, uint8_t Len, uint8_t *CRC_H, uint8_t *CRC_L){uint8_t i;uint8_t index;uint8_t crc_h = 0xFF;uint8_t crc_l = 0xFF;for(i=0; i

CRC校验不同场景实现方式不同,网上也有很多公开的库和源码,比如:LibCRC – C语言中的开源CRC库:

https://github.com/lammertb/libcrc网上还有在线计算CRC校验值以及代码生成工具,感兴趣的读者可以自行了解。

四、MD5算法

MD5:Message-Digest Algorithm 5,即“信息-摘要算法。

从名字来看就知道它是从MD3、MD4发展而来的一种加密算法,其主要通过采集文件的信息摘要,以此进行计算并加密。

通过MD5算法进行加密,文件就可以获得一个唯一的MD5值,这个值是独一无二的,就像我们的指纹一样,因此我们就可以通过文件的MD5值来确定文件是否正确,密码进行加密后也会生成MD5值,论坛就是通过MD5值来验证用户的密码是否正确的。

MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。

MD5的源码在网上都能找到现成的,而且有不同编程语言(C、 C 、 JAVA)版本。

比如由网友talent518分享的C语言版本:

https://github.com/talent518/md5

五、其他算法随着变成技术越来越发达,校验算法也越来越多,有通用的算法,也有特殊领域特定的算法。比如我之前做过密码相关的开发,使用了由密码管理局发布的SM3密码杂凑算法。还有从MD4算法改进而来的SHA-1算法(Secure Hash Algorithm 1即安全散列算法1)。本文就分享到这里,市面上的校验算法还有很多,如有需要可进一步了解。

完整性校验用到常见的算法_几种常见的校验算法相关推荐

  1. 全排列的java算法_两种常用的全排列算法(java)

    问题:给出一个字符串,输出所有可能的排列. 全排列有多种算法,此处仅介绍常用的两种:字典序法和递归法. 1.字典序法: 如何计算字符串的下一个排列了?来考虑"926520"这个字符 ...

  2. Python_机器学习_算法_第1章_K-近邻算法

    Python_机器学习_算法_第1章_K-近邻算法 文章目录 Python_机器学习_算法_第1章_K-近邻算法 K-近邻算法 学习目标 1.1 K-近邻算法简介 学习目标 1 什么是K-近邻算法 1 ...

  3. 算法中七种常见的时间复杂度

    这是我的推广信息,以激励自己更好的分享自己的知识和经验!也希望看到的你能够多多支持,谢谢! 1. 滴滴云AI大师: 目前滴滴云正在大力推广自己的云计算服务,需要购买的朋友们用我的AI大师码 「2049 ...

  4. 利用python语言实现分类算法_使用python实现kNN分类算法

    k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很 ...

  5. weka java 分类算法_使用Weka快速实践机器学习算法

    [译者注]在当下人工智能火爆发展的局面,每时每刻都有新的技术在诞生,但如果你是一个新手,Weka或许能帮助你直观.快速的感受机器学习带来的解决问题的新思路. Weka使机器学习的应用变得简单.高效并且 ...

  6. 错误录入 算法_如何使用验证错误率确定算法输出之间的关系

    错误录入 算法 Monument (www.monument.ai) enables you to quickly apply algorithms to data in a no-code inte ...

  7. python中的排序方法都有哪些_几种常见的排序方法总结(Python)

    几种常见的排序算法总结(Python) 排序算法:是一种能将一串数据依照特定顺序进行排序的一种算法. 稳定性:稳定排序算法会让原本有相等键值的记录维持相对次序.也就是如果一个排序算法是稳定的,当有两个 ...

  8. java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析

    0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...

  9. 沃舍尔算法_[数据结构拾遗]图的最短路径算法

    前言 本专题旨在快速了解常见的数据结构和算法. 在需要使用到相应算法时,能够帮助你回忆出常用的实现方案并且知晓其优缺点和适用环境.并不涉及十分具体的实现细节描述. 图的最短路径算法 最短路径问题是图论 ...

最新文章

  1. 2020 年技术趋势一览:AutoML、联邦学习、云寡头时代的终结
  2. 代币转账_手把手教你从源代码开始搭建多节点以太坊私链(五)部署智能合约及代币发行...
  3. 网络编程学习笔记(批量输入)
  4. 【PAT乙级】1035 插入与归并 (25 分)
  5. config done shell_shell do...done $config
  6. Vue学习(动态组件、组件路由缓存keepalive)-学习笔记
  7. iOS runtime实战应用:关联对象
  8. Educational Codeforces Round 106 (Rated for Div. 2) D. The Number of Pairs 数论gcd
  9. 如何关闭dell inspiron n4010的内置麦克
  10. matlab各种文件读写,Matlab的各种数据读取、文件读写等操作汇总
  11. Python爬虫 获取雪球网股票讨论内容( 获取json文件的内容)
  12. Golang ------ torrent文件解析
  13. fpga驱动ad9854重大bug——已解决!
  14. solidworks创新作业无限魔方
  15. 微信小程序开发手账从入门到部署【持续更新】
  16. Doug Lea是谁?谁知道
  17. 通信码元速率和带宽理解
  18. 分享151个ASP源码,总有一款适合您
  19. sql server怎么实现mysql 中的locate函数
  20. 破解基础----背的滚瓜烂熟差不多就会破解

热门文章

  1. 年仅26岁!这位双一流大学的特任教授,攻克世界数学难题
  2. 第一批 90 后还有半个月就 30 岁了!那些 30 岁前就成博导的人都怎样了...
  3. 陈平原教授谈博士论文写作经验:讲得太好了!
  4. 热胀冷缩,但为什么水结冰体积会膨胀?
  5. 大学用编程每月多赚2000块,是种什么体验?
  6. “人·机”互补路径下技能人才的培养
  7. Yolo家族算法分析
  8. k6前级效果器怎么用_新手学习电吉他,效果器应选择单块还是综合?
  9. Linux命令sngre,linux gre隧道创建
  10. 历经7年双11实战,阿里巴巴是如何定义云原生混部调度优先级及服务质量的?