简介
校验位是字母数字字符添加到一个编号,检测错误。校验位是一个简单易用的方式,nuetralize密钥数据的人为因素引入的错误。检查数字不纠错码。如果读者要调查强大的纠错码,他或她被称为由彼得森和韦尔登。
这也是notebale,CRC码校验位的计划,因为产生了一个以上的字母数字数字是检测错误。如果读者希望有一个很长的数据集或二进制数据集的系统,可以考虑使用32位CRC,阿德勒校验,或基于哈希校验。阿德勒校验类似一个冗余校验,可靠性交易速度。 散列应用程序的一个示例使用的CRC32,MD4,MD5,RIPEMD - 160,SHA - 1,惠而浦,和SHA - 2的哈希家庭。
本文将讨论以下校验位的计划:国防部9计划国防部7计划国防部11计划3,减肥方法IBM公司计划刚果爱国者联盟计划Verhoeff算法ISO 7064 MOD N / N - 1
此外,集团理论的表面处理提出以下的算法。常见错误
据理查德海明,两个最常见的错误是:12变成21(相邻的字符是换位)112变成122(三元不正确一倍)
雅各Verhoeff十进制代码中的错误检测的后续stastics:错误概约百分比评论#8594; B60% - 90%单个错误
AB#8594; AAB10% - 20%添加一个数字AAB#8594; AB10% - 20%省略数字AB#8594; BA10% - 20%换位错误AA#8594; BB0.5% - 1.5%双人错误ACB#8594; BCAGT; 1%跳转双人错误13#8594; 300.5% - 1.5%注音错误(类似的发音)下载
有5下载本文。他们在文章的结尾。国防部9计划
国防部9系统是由美国邮政汇票服务。如果汇票号码是123456789,C = 0,汇票上印的电话号码是1234567890。该系统是C = N 9%。这个系统也被称为"铸造出九"。铸造出花枝招展患有0#8594的事实,9日和9#8594; 0不检测;没有换位检测到错误(除非它invlolves校验位)。国防部7计划
一个比铸造出花枝招展更强大的系统是一个模7系统。 Bressoud和旅行车证明以下内容:单个错误检出率93.81%换位错误检出率93.87%
国防部9计划类似,C = N%7。然而,只有3换位的错误是检测不到的:70#8596; 07,81#8596; 18日和92#8596; 29。国防部11计划
国防部11计划是一个加权计划又称国际标准图书编号(ISBN)。第9位代表的唯一标识符,第十位是校验位。该计划自11 MOD,校验位0-9或X
这个mod 11为基础的系统运行(即个人数字数n)上的一个点的产品。 N??(10,9,...,2,1)MOD 10。换句话说,让AI N(最显着的至少显著)的第i个数字。然后
C = 10a1 9A2 8a3 7a4 6a5 5a6 4a7 3a8 2a9 MOD 11
第10届(A10)数字会- C,所以下列公式(称为检查方程)成立。
0 = 10a1 9A2 8a3 7a4 6a5 5a6 4a7 3a8 2a9 1A10 MOD 11
这个计划检测到所有单一错误,并在任何距离(假设的总人数是10位或更少位长)的任意两个数字换位。
{S0}
3,减肥方法// Check Digit Sample 3
_tstring number = _T("073560753"); // c should be 2
_tcout << _T("ISBN: ") << number << endl;
int i = 10, c = 0;
for( _tstring::const_iterator it = number.begin();
it != number.end(); i--, it++ )
{
if( _T('X') == *it )
{ c += 10 * i; }
else
{ c += CharToNumber( *it ) * i; }
c %= 11;
}
// a_10 = -c
c = 11 - c;
if( 10 == c )
{ _tcout << _T("Check digit is: ") << _T("X") << endl; }
else
{ _tcout << _T("Check digit is: ") << c << endl; }
3重量的方法也被称为电子转帐路由号码银行业计划。这是一个模10的系统,但N工作作为一个整体的数量,而不是一个点的产品经营(即个别数字,数字n)。
因此,一个8位的路由数量,校验位彗星= N??(7,3,9,7,3,9,7,3),MOD 10。换句话说,让AI N(最显着的至少显著)的第i个数字。然后
C = 7A1 3A2 9a3 7a4 3A5 9a6 7a7 3a8 MOD 10
C然后8位路线连接在一起,形成一个9位数的路由号码
这个计划是基于10乘法模产生的10位十进制数字的排列,如果是一个集合{1,3,7,9}两位数的乘法因子,但只有一部分十进制数字如果该系数是5或偶数。该系统无法检测到相邻的5个不同的数字换位。
3重量法不使用简单的模块化减少,所以C = 10 - C是不需要持有的平等。
读者应该发现以下检查方程成立(其中A9 - C):
0 = 7A1 3A2 9a3 7a4 3A5 9a6 7a7 3a8 A9 MOD 10
3重量计划介绍如下。正如读者可以看到,它推广到任意长度的数字容易。但是,如果读者的欲望很长的数据集,或二进制数据集系统考虑使用一个CRC或桤木校验,或基于哈希校验。
{S1}{C}IBM校验位计划
IBM的检查数字的计划是尽可能接近一个完美的系统以上的整数字段(Z)的工作时,可以得到的。这个计划是由公司,如万事达卡和维萨卡,和加拿大的社会保险号码。该系统也被称为LUHN的算法。该计划将检测所有单错误,和所有的换位错误,除0#8596; 9。
校验位C是点积定义为:
- (A1,A2,A3,A4,...,AN - 1,)(2,1,2,1,...,1,2) - ??R(MOD 10)
r是奇数索引数字大于5。这意味着R = R 1当且仅当AI GT; 5,在那里我是奇数。
在实践中,该算法是完全不同的实施。
{S2}
刚果爱国者联盟计划// Check Digit Sample 4
int i = 1, c = 0;
for( _tstring::reverse_iterator it = number.rbegin();
it != number.rend(); it++, i++)
{
if( 0 == i % 2 )
{
// Add even indexes
c += CharToNumber( *it );
}
else
{
// Cast Out Nines on the odd indexed digits
// after multiplying by 2
int t = 2 * CharToNumber( *it );
if( t > 9 ) t -= 9; // mod 9
c += t;
}
}
的通用产品代码系统是类似IBM的系统,除了重量3甚至索引数字。实现留给读者作为练习。Verhoeff算法
与以前exmamined的方法(环Z)不同,Verhoeff的算法工作二面角组D5。
该算法是在爱尔兰共和国的ESB网络等公司使用。该算法是完美的,在它检测到的所有单的错误和所有换位错误。此外,它检测到大多数(但不是所有)的双子错误,跳双人错误,跳转换位错误(ABC#8594; CBA),和注音错误。
Verhorff的观察是如下:之一可以使用的10对称性,以编码使用的身份为0的10位数;旋转(按顺序)1,2,3,4;和反射为5,6, 7,8,9。
在准备实施的最后一步是确定的数字的排列。
让#948;数字排列如下:#948;不执行0改造#948;开关1和4#948;开关2和3#948;循环置换5,8,6,9,7
#948;(0)= 0
#948;(1)= 4
#948;(4)= 1
#948;(2)= 3
#948; (3)= 2
#948;(5)= 8
#948;(8)= 6
#948;(6)9 =
#948;(9)= 7 { BR}#948(7)= 5;
Ž不同,D5是不是communative:8 7#8800; 7 8???。
??/ P>
0
1234567800123456789112
3
40678952340178
9
563340128956744
012395678
559876043216659
8
7104327659821043887659
3
21049986543210
读者应该认识到,D5是一个复杂的实体(功能失调),其元素从0到9的整数,有点随意映射和集团化运作,是不是都喜欢的加法或乘法。此外,还有没有D5的概念:LT和GT;没有任何意义。乘以元素时,该表的红色阴影表示Communative财产的损失。
{S3}
一个小题外话:??一个愿望来执行6 1,首先找到第6行,然后在第一列。 6??1 = 5。C = 948; N(A1)#948;??N - 1(A2)#948;??N - 2(A2)???... ?#948;??2(1)#948;()
因此,编码1793,读者会:
C =#948; 4(1)#948;???3(7)#948; 2(9)#948;??1(3)
#948 4(1)=#948; 3(4)=#948; 2(1)=#948; 1(4)= 1
#948; 3(7)=#948; 2(5)= #948; 1(8)= 6
#948; 2(9)=#948; 1(7)= 5
#948; 1(3)= 2
1??6??5??
(1??(6??(5??2))2)= 4
至于其他的例子,4的倒数是必需的,以便检查方程成立。因此,校验位等于1(1??4 = 0)。
下面是背道而驰1000372996 checkdigit5的结果。由于乘法,置换,逆表,代码是很容易的。注意,C是不再从前一阶段的一笔 - 它是用来作为一个查找,然后有效地丢弃。
{S4}的
ISO 7064 MOD N / N - 1// Check Digit 5
// skip i = 0 - it is the checkdigit
// (which is being calculated)
int i = 1, c = 0;
for( _tstring::reverse_iterator it = number.rbegin();
it != number.rend(); it++, i++)
{
// c = M[ c ][ P[ i % 8 ][ CharToNumber( *it ) ]];
unsigned int n = CharToNumber( *it );
unsigned int p = P[ i % 8 ][ n ];
c = M[ c ][ p ];
}
c = Inv[ c ];
本节提供了一个校验位家庭的概述。在下载Implemetations。
ISO规范是专为以下字母:数字(10位数字:0到9)字母(26个字母:A到Z)字母或数字(字母和数字)
ISO规范旨在检测以下():所有单替代错误(另一个替代单个字符,例如为1234 4234);所有或几乎所有的单(本地)换位错误(两个单个字符的换位,无论是相邻或与它们之间的一个字符,例如12354或12345 12543);所有或几乎所有的移位错误(向左或向右的整串的变化);高比例的双取代错误(在相同的字符串替换两个独立的单错误,例如7234587,1234567);高比例的所有其他错误。
评论国防部10/11欧洲血库,
人独特的标识符(美国国立卫生研究院)国防部16/17
欧洲银行路由国防部36/37美牲畜识别群论
一组是一组对象和相关的操作。组用于日常生活。例如,计算在一个房间里的人。该集团是在整数和操作此外,记。有可以执行的其他操作,如乘法,记为X。
此外,有一个标识元素:0。这提供了预期的结果:1 0 = 1,0 1 = 1,等下乘法,identity元素为1。同样是真正的乘法:1 × 1 = 1,5 × 1 = 5,等等。
正如人们可以在整数操作,操作可以执行超过D5的。将被定义为如下的操作。
{五}
的第一个操作,将被定义为#961;这是希腊字母RHO,并表示在D5的旋转。 #961; 0的下旋转的身份元素,因为它离开元素不变。 #961; 1旋转二面角72?? #961;旋转二面角144??最后,#961; 5 =#961; 0。
{中六}
接下来的操作,将被定义为#963;这是希腊字母西格玛。因此,在字母表中的Rho。这将是用来表示操作反射。 #963; 0叶的元素不变,而#963; 1"翻转"的元素超过它的横轴。所以#963; 2 =#963; 0。敏锐的读者应该认识到#961; 5 =#963; 2。
{七}
为了直观的观察,二面角的分区如下。
{S8}
现在,执行对元素的操作。例如,#961; 7#963; 5。 #961; 7 =#961; 2,所以:
{S9}
和明年,#963; 5 =#963; 1:
最后的可视化表示如下图所示。请注意,这是作为一种视觉演示给用户。这并不意味着直观地展示Verhoeff的算法。绿色表示分区2的新位置。
{S11}摘要
虽然提出一个完善的检测数字系统,学术界提供更。在1978年不平凡的纸,塞西,五拉贾拉曼,和PS Kenjale形容为一个检查系统,可用于纠正任何单个错误或换位错误。值得注意的是,系统的需要,而不是一个两个校验位,只适用于某些基地的有效。
鼓励读者访问错误检测十进制数字,瓦格纳和推杆的经验,在发展商业邮购房子的数字系统检查(包括本文)。下载修订2007年7月27日固定的语法错误2007年6月19日删除样品1饲料2007年6月2日返工简介2007年2月6日上架的"常见错误"节2007年4月17日清理格式化二○○六年十二月十九日添加参考{A}12.10.2006新增ISO 7064材料二○○六年十二月九日更新的范例Verhoeff(扩大手工计算)2006年11月26日初步发布