校验码

关于数据校验纠错算法

笑着哭i 提交于 2019-11-27 19:40:20
最近对于数据传输的噪音损耗问题的解决方案查了些资料 就此做一个总结:    数据损坏     因为网线被老鼠啃了或者硬盘摔地上了导致数据错了     关于数据损坏的问题其实不限于网络传输方面,可以涉及到所有和数据相关的方面,比如文件解压,网络通讯,保密数据的校验(数据签名)等等    错误校验     即检验某一段数据是否有误。     因为是不是有误光凭数据本身不可能知道,所以必须加上附加的认证方法     当然最简单的认证方法就是再传一次数据,拿着数据一个个对着原本的数据对照一下。。。不过这样不说太麻烦,如果要实现这个方法,第二次传输这个数据的时候,难以保证这个数据是不是也出现了错误     另一方面,显然数据越短,这段数据出现错误的概率越小,因为比特出错概率(BER)是不变的。所以如果可以把这个认证的数据(校验码)压缩成一段很短的数据就可以减少校验码出错的情况了     比如奇偶校验(Parity Check) 或者说,数1校验       奇偶校验制定了一个协议,规定数据中1的个数只能是偶数       如果原始数据1是奇数,则加一个1在最前面;反之则加一个0在前面。       如 0 110101 和 1 1010010 都是符合规定的。 很显然这个第一位就是校验码。       那么如果数据出了错误,某个0变成1或者1变成0,那么接收者数一遍1发现不是偶数个

CRC校验学习

随声附和 提交于 2019-11-27 13:06:11
上面文字是来自一个 版本的介绍crc校验方式的介绍, 下面截图是一个视频crc校验原理的讲解。 通过这两部分才彻底弄清楚了crc是怎么计算的。 上部分来自 https://blog.csdn.net/weicao1990/article/details/51669853 视频来自 https://v.qq.com/x/page/l0812ydj8i2.html 1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“ 模2除法 ”)。到达接收端后,再把接收到的新帧除以(同样采用“ 模2除法 ”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1

避免“垃圾进,垃圾出”

僤鯓⒐⒋嵵緔 提交于 2019-11-27 01:25:59
在编写程序的时候,要避免“垃圾进,垃圾出”,解决的办法是: 1、垃圾不准进 2、垃圾进来,给出提示信息,并且设置一个合适的默认值。 结合实际项目谈谈。在项目中,需要解析一个数据文件,这个数据文件是程序自动生成的。人工修改数据文件,设置无效或者错误的信息,这种情况太多,比如属性长度设置为string,或者负数。在解析数据文件的时候,对每一个属性的每一种错误情况,都要进行考虑,并且给出详细的错误说明,很难做到。就算做到了,也是很差劲的设计。因为,程序中充斥着大量这样的代码:判断有效性,给出错误提示,这样就掩盖了真正要做的重要事情。 也就是说,垃圾进来,给出提示信息,不合适。那么怎么办呢?对于这种情况,人工修改数据文件后,数据文件就属于垃圾数据了。 可以这样处理,在生成这个数据文件的时候,采用一个算法根据文件的内容生成一个校验码。在解析数据文件的时候,采用同样的算法,根据数据文件的内容,再次计算校验码。如果校验码不一致,说明数据文件被人修改了。当然,存在这种可能性,数据文件修改了,但是生成的校验码还是一样。但是,在不知道生成校验码算法的前提下,出现这种情况,概率微乎其微。 转载于:https://www.cnblogs.com/nzbbody/p/3368134.html 来源: https://blog.csdn.net/weixin_30208191/article/details