-
2017-12-26 16:39:29
末位为校验码
/**
EAN码校验位的计算方法
从代码位置序号2开始,所有偶数位的数字代码求和为a。
将上步中的a乘以3为a。
从代码位置序号3开始,所有奇数位的数字代码求和为b。
将a和b相加为c。
取c的个位数d。
用10减去d即为校验位数值。例:234235654652的校验码的计算如下表:
数据码 校验码
代码位置序号 13 12 11 10 9 8 7 6 5 4 3 2 1
数字码 2 3 4 2 3 5 5 5 4 6 5 2 ?
偶数位 3 + 2 + 5 + 5 + 6 + 2
奇数位 2 + 4 + 3 + 5 + 4 + 5步骤1:3+2+5+5+6+2=23
步骤2:23*3=69
步骤3:2+4+3+5+4+5=23
步骤4:69+23=92
步骤5:10-2=8
步骤6:校验码为 8
数据码 校验码
代码位置序号 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
数字码 2 0 0 0 0 0 5 0 0 2 2 0 0 0 1 4 7 ?
偶数位 2 + 0 + 0 + 5 + 0 + 2 + 0 + 1 + 7
奇数位 0 + 0 + 0 + 0 + 2 + 0 + 0 + 4步骤1:2+0+0+5+0+2+0+1+7=17
步骤2:17*3=51
步骤3:0+0+0+0+2+0+0+4=6
步骤4:51+6=57
步骤5:10-7=3
步骤6:校验码为 3*/
/// <summary>
/// EAN码校验位的计算
/// </summary>
/// <param name="szCode"></param>
/// <returns></returns>
private bool GetVerifyBit(ref string szCode)
{
int nNum1 = 0;
int nNum2 = 0;
int nNum3 = 0;
int szLen = 0;
if ( szCode == null )
return false;
szLen = szCode.Length;
if(szLen <=12 || szLen >= 17)
return true;
for ( int i=0; i<szLen; i++)
{if ( i%2 == 0 )
{
nNum2 += int.Parse(szCode[i].ToString()); //偶数
}
else
{
nNum1 += int.Parse(szCode[i].ToString()); //奇数
}
}
nNum3 = (Operator.DiscountLabelBarLength % 2 ==0) ? nNum1 + nNum2 * 3 : nNum1 * 3 + nNum2 ;
int t ;
if(nNum3%10>0) t= 10- (nNum3 % 10) ;
else t=0;
szCode+=t;return true
}/// <summary>
/// EAN码校验位的计算
/// </summary>
/// <param name="szCode"></param>
/// <returns></returns>
private bool GetVerifyBit(ref string szCode)
{
int nNum1 = 0;
int nNum2 = 0;
int nNum3 = 0;
int szLen = 0;
if ( szCode == null )
return false;
szLen = szCode.Length;
if(szLen <=12 || szLen >= 17)
return true;
for ( int i=0; i<szLen; i++)
{if ( i%2 == 0 )
{
nNum2 += int.Parse(szCode[i].ToString()); //偶数
}
else
{
nNum1 += int.Parse(szCode[i].ToString()); //奇数
}
}
nNum3 = (Operator.DiscountLabelBarLength % 2 ==0) ? nNum1 + nNum2 * 3 : nNum1 * 3 + nNum2 ;
int t ;
if(nNum3%10>0) t= 10- (nNum3 % 10) ;
else t=0;
szCode+=t;return true
}如果再精简些应该直接用数组类型来实现,这样就不用使用string了.代码中的细节部分不是效率最高写法.盖于本人学历尚浅,对char等类型掌握的还不熟.所以就用一堆的转型来解决了.
代码用c#写成,相信学java人士也能看懂吧 呵呵
前几天上传得代码有问题居然没人发现,汗,还是自己改过来吧...现在已经改完了,不知道会不会有其他得问题了,欢迎批评啊
更多相关内容 -
EAN-13码、ITF-14码等的校验位计算
2020-10-15 09:31:54EAN-13码、ITF-14码等的校验位计算,计算的原则:利用偶三奇一和,再进行下一步的运算。写的是最简单的vb代码。 -
海明码计算(校验码)
2022-03-10 15:29:25海明码默认进行偶校验(除非特殊说明使用奇校验)。 海明码是一串只由0和1组成的序列 奇偶校验 奇校验:一串由0和1组成的序列中1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。 偶校验:一串由0和1...前言:
海明码:
- 海明码一般只能纠1位错。
- 海明码默认进行偶校验(除非特殊说明使用奇校验)。
- 海明码是一串只由0和1组成的序列
奇偶校验
奇校验:一串由0和1组成的序列中1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。
偶校验:一串由0和1组成的序列中1的个数如果为奇数则在前面加个1,使1的个数变成偶数,否则加0。例:
1111
奇校验就是11111
偶校验就是01111
1110
奇校验就是01110
偶校验就是11110
计算:
计算 1011 的海明码
一、计算校验位的个数
公式:2^r >= m + r + 1
(理解:在只出错一位的情况下,且出错只为0或1之间的出错,所以,2^r表示r位校验码最大可以校验的总位数,m+r意思为整个码中可能出错的次数,1为唯一正确的一次,所以2^r 要>= m + r + 1)
r:校验位的个数
m:信息位的个数 1011的信息位个数为:4
所以r最小为3,即校验位的个数为3
死记硬背:
二、分组
确定校验位在海明码中的位置
校验码只出现在第2的r次方位置上,这里用P表示
位置的二进制 111 110 101 100 011 010 001 位置 L7 L6 L5 L4 L3 L2 L1 序列 1 0 1 P3 1 P2 P1 分组:对P进行按进制位分组
先从P1开始,P1位置二进制中的最后一位是1(不看0),所以将所有位置二进制中最后一位为1的分为一组
即:
L1,L3,L5,L7以此类推
L1,L3,L5,L7 将对应位置的序列值替换 P1,1,1,1
L2,L3,L6,L7 =====================》 P2,1,0,1
L4,L5,L6,L7 P3,1,0,1
校验码计算:
偶校验:一串由0和1组成的序列中1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。
第一组中1的个数是3,为奇数,所以P1应为1,保证1的个数为偶数,同理P2=0,P3=0
将P带回序列得到偶校验码为 1010101
奇校验:一串由0和1组成的序列中1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。
第一组中1的个数是3,为奇数,所以P1应为0,保证1的个数为奇数,同理P2=1,P3=1
将P带回序列得到奇校验码为 1011110
纠错:
假如传输过程中将1011传成了 1001
按照偶校验纠错:校验位P的值刚刚已经计算出P1=1,P2=0,P3=0
位置的二进制 111 110 101 100 011 010 001 位置 L7 L6 L5 L4 L3 L2 L1 序列 1 0 0 0 1 0 1 按照上方的方法进行分组
根据纠错位E进行判断错误的位置
E1,L1,L3,L5,L7 将对应位置的序列值替换 E1,1,1,0,1
E2,L2,L3,L6,L7 =====================》 E2,0,1,0,1
E3,L4,L5,L6,L7 E3,0,0,0,1
根据偶校验得出E1=1,E2=0,E3=1,按照E3E2E1的顺序合并得到101,101为10进制的5,所以第5个位置出错,如表所示是正确的
-
一文看懂海明校验码及其计算方法(详细总结)
2021-10-17 22:28:46工作原因接触了下海明校验码,网上看了好多文章后终于算是明白了。可是看到的这些资源,要么说得云里雾里,要么还有错误(然后还被点了好多赞。。。),无论如何这些都容易误导小白。所以我这个C站老潜水员也坐不住...网上看了好几篇文章后终于算是捋明白了,但是看到的这些资源要么说得云里雾里,要么干脆说得有问题(然后还被点了好多赞。。。),无论如何这些都容易误导小白。作为C站多年老潜水员,我还是把海明校验码的要点总结分享一下吧。
1. 海明码的特点:
其中m表示数据位的位数,k表示海明校验码的位数
k位海明校验码一共可以表示
种校验信息结果,其中有一种要用来表示没有出错的情况,则其余还剩
-1种结果,为了使校验结果可以指出任一位出错的位置,则需要满足以上不等式。
2. 举例说明:
发送端:
设要传输的数据为101101100
(1)可知m=9,由公式
,可知k最小值为4,所以总共要传输的数据位数为9+4=13;
(2)海明校验码放在索引号为
的位(n=0,1,2,...,k-1)上,本例中k=4,所以校验位的索引为第1,2,4,8位,于是在下表中把这几位空出来
索引号
1
2
3
4
5
6
7
8
9
10
11
12
13
H1
H2
1
H4
0
1
1
H8
0
1
1
0
0
(3)列出进制转换表:
索引号
8(
)
4(
)
2(
)
1(
)
3
0
0
1
1
5
0
1
0
1
6
0
1
1
0
7
0
1
1
1
9
1
0
0
1
10
1
0
1
0
11
1
0
1
1
12
1
1
0
0
13
1
1
0
1
上表中,先说每一行的内容:从第二行开始,每一行的第一列代表索引号,这个索引号是除去了海明校验位之外的其他所有位。后面几列为该索引号对应的二进制表示,其位数取决于第(1)步计算得出的海明校验码的位数,比如第二行,索引号是3,十进制3对应的二进制就是0011,之所以用4位表示是因为这段信息码需要4个海明校验位。
再看列信息:第一行最右边数字1所对应的列里,出现1的,就表示可以用第H1位完成校验,出现数字0则表示不能用H1位进行校验,因此,由上表可知:
校验位H1负责校验:第3,5,7,9,11,13位(上表黄色高亮显示部分),对应位置上的值进行异或得:1⊕0⊕1⊕0⊕1⊕0=1,由于海明校验做的是偶校验,则H1=1;
校验位H2负责校验:第3,6,7,10,11位(上表蓝色高亮显示部分),对应位置上的值进行异或得:1⊕1⊕1⊕1⊕1=1;
校验位H4负责校验:第5,6,7,12,13位,对应位置上的值进行异或得:0⊕1⊕1⊕0⊕0=0;
校验位H8负责校验:第9,10,11,12,13位,对应位置上的值进行异或得:0⊕1⊕1⊕0⊕0=0。(4)得到最终要传输的数据串为
索引号
1
2
3
4
5
6
7
8
9
10
11
12
13
1
1
1
0
0
1
1
0
0
1
1
0
0
接收端:
(1)进行校验:
若此时接收方收到的数据相比源数据,在第11位发生了错误:
索引号
1
2
3
4
5
6
7
8
9
10
11
12
13
1
1
1
0
0
1
1
0
0
1
0
0
0
接收方先按照第③步中类似的方式进行计算校验,区别在于要加上校验位自身这一位,即:
C1的值为第H1,3,5,7,9,11,13位上的值进行异或,计算结果为1
C2的值为第H2,3,6,7,10,11位上的值进行异或,计算结果为1
C4的值为第H4,5,6,7,12,13位上的值进行异或,计算结果为0
C8的值为第H8,9,10,11,12,13位上的值进行异或,计算结果为1
(2)错误位判定:
由于海明校验采取的是偶校验,所以判断出C4监督式包含的数据位无错,错误位发生在C1,C2,C8三个监督式包含的位上。
此时的做法是:①找到C1,C2,C8这三个监督式共同包含的位;②找出共同包含的位之后,再剔除掉在C4中出现过的位(因为已经验证过C4监督式中的位是正确的);③剩下的位就是发生传输错误的位。
这三个监督式都包含第11位,同时C4监督式中没有第11位,因此出错的位就是第11位。
-
计算机组成原理——校验码(奇偶校验码、汉明校验码、循环冗余校验码)
2020-05-25 21:30:44数据校验码是一种常用的带有发现某些错误,甚至带有一定自动改错能力的数据编码方法。 例子: 码距:两个合法码字对应位上数字的不同位的个数 上图中,方案一的码距为1,因为00和01之间只有1位数字不同。而方案二...一、为什么要使用校验码?
数据在计算机系统内加工、存取和传送的过程中可能会产生错误。为了减少和避免这类错误,引入了数据校验码。数据校验码是一种常用的带有发现某些错误,甚至带有一定自动改错能力的数据编码方法。
例子:
码距:两个合法码字对应位上数字的不同位的个数
上图中,方案一的码距为1,因为00和01之间只有1位数字不同。而方案二的码距为2,因为00和11之间有2位数字不同。
奇校验:保证一段数据中出现奇数个1,仅需1位
在上图方案一中,使用奇校验方法,则A的码字变为100,B的码字变为001。码字中的最高位(即加粗的数字)就是校验码。增加校验码后,可以发现方案一的码距变为了2。
将奇校验改变规则->海明码、CRC二、奇偶校验码
奇校验码:整个校验码(有效信息位和校验位)中“1”的个数为奇数。
偶校验码:整个校验码(有效信息位和校验位)中“1”的个数为偶数。
【例2-3】给出两个编码1001101和1010111的奇校验码和偶校验码。
答:
设最高位为校验位,余7位是信息位,则对应的奇偶校验码为:
1001101 —— 11001101(奇校验)01001101(偶校验)
1010111 —— 01010111(奇校验)11010111(偶校验)三、海明校验码思路简介
海明码设计思路:分组校验一>多个校验位一>校验位标注出错位置
1010->1011 如果1010在传输过程中,变成了1011,我们希望通过校验位来告诉我们数据的哪个位置出现了错误!显然这里的校验位应该为001。
四、海明码求解步骤
信息位:1010
- 确定海明码的位数:2^k >= n+k+1
n=4 ------> k=3
设信息位D4D3D2D1(1010),共4位,校验位P3P2P1,共3位,对应的海明码为H7、H6、H5、H4、H3、H2、H1。 - 确定校验位的分布
校验位P,放在海明位号为的位置上
信息位按顺序放到其余位置 - 求校验位的值
- 纠错
经过检验方程计算后得到的结果全为0,则说明数据传输过程中没有出错。否则,说明出现了错误,出现1的位置,即为数据传输过程中中出错的位置!
五、循环冗余校验码
【例2-5】设生成多项式为G(x)=x3+x2+1,信息码为101001,求对应的CRC码。- 确定K、R以及生成多项式对应的二进制码
- 移位
信息码左移R位,也就是低位补R个0 - 相除
对移位后的信息码,用生成多项式进行模2除法,产生余数
对应的CRC码:101001001
模2除法的方法如下:
1)最高位为1则商1,最高位为0则商0
2)减法规则为:对应位上相同,结果为0,不同,结果为1
4. 检错和纠错
六、总结
- 确定海明码的位数:2^k >= n+k+1
-
BCD码、奇偶校验码、海明校验码
2022-03-15 11:22:24而4位二进制位可以组合成16种状态,去掉10种状态后还有6种冗余状态,所以从16种状态中选取10种状态来表示十进制数位0-9的方法很多,可以产生多种BCD种。 8421码的映射关系: 4个二进制位 ------>16种不同的状态 ... -
3 种常用校验码「奇偶校验码」「海明校验码」「循环冗余校验码」
2021-12-23 20:05:46校验码是指能够发现或能够自动纠正错误的数据编码,也称检错纠错码。 校验码的原理是通过增加一些冗余码,来检验或纠错编码。 -
奇偶校验码
2021-03-20 16:39:32理解「奇偶校验码」前,最好要知道一个词的概念「码距」 码距:两个合法码字对应二进制位上数字不同...偶校验 信息位 + 校验位里面 1 的个数的总和为偶数个 信息位:就是其原来二进数数的位的个数 校验位:由信息位进 -
计算机组成原理校验码生成电路的设计.doc
2021-07-16 02:22:54计算机组成原理校验码生成电路的设计编 号:学 号: 9课 程 设 计教 学 院计算机学院课程名称计算机组成原理课程设计题 目校验码生成电路的设计专 业计算机科学与技术班 级计科一班姓 名陈建辉同组人员周海涛 石义沣... -
常用校验码(奇偶校验码、海明校验码、CRC校验码)
2019-10-24 22:37:57常用校验码(奇偶校验码、海明校验码、CRC校验码) 一、奇偶校验码二、海明校验码三、CRC校验码 计算机系统运行时,各个部之间要进行数据交换.交换的过程中,会有发生误码的可能(即0变成1或1变成0),由于... -
计算机组成原理(校验码).ppt
2021-07-16 03:57:26《计算机组成原理(校验码).ppt》由会员分享,可在线阅读,更多相关《计算机...,将数据分组,每一组数据后附加一个校验位,使得该组数据(包括校验位)中1的个数为偶数(偶校验)或奇数(奇校验)。 三种方式: 垂直奇偶校... -
海明校验码(计算机组成原理11)
2020-10-05 14:41:32- 海明码的基本思想 - 海明码的求解步骤和全校验码 -
计算机中为什么要采用校验码?常用的校验码有哪几种?用在什么地方
2021-06-24 02:39:01计算机中为什么要采用校验码?常用的校验码有哪几种?用在什么地方以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!计算机中为什么要采用校验码?常用的... -
奇偶校验码原来这样算!!!
2020-05-01 16:25:46数据传输的正误 数据发出方A像数据接收方B发送一串加密过后的情书(11011),但是信息在传输过程中可能发生错误,比如某人截获并修改内容,一段美好的爱情就结束了…...奇偶校验码分两种,实现约定是采用奇校验方式还是... -
校验码(奇偶校验码)
2020-09-21 21:05:16下图为奇校验和偶校验的设置方法。 例如:M的ASCII码77,二进制表示为01001101,若要求奇校验且校验位在最高位,则需要使1的个数为奇数。现原码中的1的个数为偶数,则校验位取值为1,将最高位设置为1,则M的二进制... -
10位ISBN和13位ISBN校验码的计算方法[转]
2021-01-28 08:46:3210位ISBN校验位的计算方法:(模数11 余数 0-10 差数 1-11 校验位:0-9, x(差数为10))以ISBN 7-81090-021-?为例,其计算如下1) 取ISBN前9位数字7 8 1 0 9 0 0 2 12) 取各位数字所对应的加权值(10~2)10 9 8 7 6 5 4 3 ... -
计算机网络概论-校验方法和校验码
2022-01-12 14:31:53这种方法通过在编码中增加一位校验码来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。 通俗的说 奇校验:原始码流+校验位 总共有奇数个1 偶校验:原始码流+校验位 总共有偶数个1 还是不懂... -
三种校验码
2021-07-28 06:48:54奇偶校验、海明码、CRC循环冗余校验码三种校验码比较重要,需要牢记,在计算机网络中用处较大奇偶校验根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶... -
计算机三大校验码的分类整理
2020-08-29 13:34:30顾名思义,它有两种校验方法:奇校验和偶校验 奇校验:原始码流+校验位 总共有奇数个1 偶校验:原始码流+校验位 总共有偶数个1 错误检测能力 奇校验 正确码流 11000001 错1位 11000011 变成了偶数个1,能检测出错误... -
计算机组成原理复习(校验码)
2021-12-24 11:55:18计算机组成原理之校验码,复习重点!!!! -
校验码 奇偶校验 海明码校验
2020-06-28 17:07:10采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中"1"的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验"1"的个数是否为奇数,... -
软件考试—计算机组成原理—奇偶校验码、海明码、循环冗余校验码
2022-05-05 15:41:03校验码:奇偶校验码、海明码、循环冗余校验码 -
一文搞定校验码(奇偶校验,海明,CRC 码)
2021-03-09 06:14:36效验码校验码:指能够发现或能够自动纠正错误的数据编码,也称检错纠错编码。实现原理:通过加一冗余码,来检验或纠错编码码字 : 由若干位代码组成的一个字码距:将两个码字逐位进行对比,具有不同的位的个数称为两... -
2.1.5 校验码(一文带你分析搞懂:奇偶校验码、海明码、CRC码)
2020-02-07 14:34:55(1)奇校验(1)偶校验为什么无法检查出偶数个错误?2.海明(汉明)校验码什么是海明校验码?一题搞懂海明码,在信息位 n=4 ,校验位 k=3 时,求 1010 的海明码。(1)确定海明码位数(2)确定校验位 P~i~ 在海明码中... -
计算机系统基础知识——校验码之奇偶校验码
2020-10-07 20:16:22前言:奇偶校验码是一种增加二进制代码传输距离最简单和最广泛的方法,通过增加冗余位使码字中“1”的个数恒为奇数或者偶数。 -
计算机组成原理——奇偶校验,海明校验,循环冗余校验
2022-03-26 23:48:48偶校验:整个校验码(原有信息+校验位)中的“1”的个数为偶数 举个例子: 有效信息位:1001101 奇校验:10011011 或 11001101 偶校验:10011010 或 01001101 偶校验的实现 偶校验在硬件中是使用异或运算来...