检查数字
检查数字是一种冗余检查的形式,用于在识别号(例如银行帐号)上检测到错误,这些形式在应用程序中至少有时会手动输入。它类似于用于检查计算机生成数据中错误的二进制奇偶校验位。它由一个或多个数字(或字母)组成,该数字(或字母)由序列输入中的其他数字(或字母)计算出的算法。
使用校验数字,可以在一系列字符(通常是数字)的输入中检测简单错误,例如单个错误的数字或两个连续数字的某些排列。
设计
检查数字算法通常旨在捕获人的转录误差。根据复杂性的顺序,这些包括以下内容:
- 字母/数字错误,例如L→1或O→0
- 单位数错误,例如1→2
- 换位误差,例如12→21
- 双错误,例如11→22
- 跳跃换位错误,例如132→231
- 跳高双错误,例如131→232
- 语音错误,例如60→16(“六十”至“ 16”)
在选择系统时,捕获错误的可能性很高,可以与实施难度交易;简单的检查数字系统很容易被人类理解和实现,但没有像复杂的错误一样多的错误,这需要复杂的程序才能实现。
一个理想的功能是,与零的左衬板不应更改支票数字。这允许使用可变长度数字并更改长度。如果在原始数字中添加了一个检查数字,则系统不会始终捕获多个错误,例如两个替换错误(12→34),但是通常,双重错误将被抓到90%的时间(这两个更改都将捕获需要通过抵消数量来更改输出)。
一个非常简单的检查数字方法是获取所有数字的总和(数字总和) modulo 10.这将捕获任何单位错误,因为这样的错误始终会更改总和,但不会捕获任何换位错误(切换两位数)作为重新排序不会更改总和。
一种稍微复杂的方法是将数字的加权总和Modulo 10取用,每个数字位置都具有不同的权重。
为了说明这一点,例如,如果四位数的权重为5、3、2、7,并且要编码的数字为4871,那么一个人将服用5×4 + 3×8 + 2×7 + 7×1 = 65,即65 Modulo 10,支票数字为5,给出48715。
重量为1、3、7或9的系统,相邻数字上的权重不同:例如, UPC代码中的31个31个权重, EAN数字13 13个权重(GS1算法)和371 371 371个在美国银行路由运输号码中使用的权重。该系统检测所有单位错误,约90%的换位错误。使用1、3、7和9是因为它们与10相关,因此更改任何数字更改了支票数;使用2或5可以排除的系数会丢失信息(因为5×0 = 5×2 = 5×4 = 5×6 = 5×8 = 0 modulo 10),因此不会捕获一些单数错误。在相邻数字上使用不同的权重意味着大多数换位都会更改支票数字。但是,由于所有权重都均匀地不同,因此这不会捕获两个数字的换位,而两个数字的换位为5(0和5、1和5、1和5、2和6、2和7、3和8、4和9),因为2和5乘以产生10。
ISBN-10代码相反,使用Modulo 11,这是Prime,所有数字位置具有不同的权重1、2,... 10.此系统因此检测所有单位替换和换位错误(包括跳转换位),但是以支票数字为代价为10,以“ x”为代表。 (替代方案仅仅是为了避免使用导致“ X”检查数字的序列号。)ISBN-13而不是使用EAN数字中使用的GS1算法。
更复杂的算法包括Luhn算法(1954),该算法捕获了98%的单位换位错误(未检测到90↔09)和更复杂的Verhoeff Algorithm (1969)错误,许多(但不是全部)更复杂的错误。类似的是另一个基于代数的抽象方法,即DAMM算法(2004),它也检测到所有单位误差和所有相邻的换位误差。这三种方法使用单个检查数字,因此将无法捕获更复杂错误的10%。为了降低此故障率,有必要使用多个检查数字(例如,Modulo 97检查下面提到的检查,该检查使用了两个检查数字 - 对于算法,请参见国际银行帐号)和/或或使用支票数字中的字符范围更大,例如字母加上数字。
例子
UPC,EAN,GLN,GTIN,GS1管理的数字
通用产品代码,国际文章编号,全球位置编号或全球贸易项目编号的最终数字是计算出:
- 将数字从右侧(第一,第三,第五等)中添加到奇数位置中,而不是支票数字),然后乘以三个。
- 将数字添加到偶数位置(第二,第四,第六等)中的数字(最多,但不包括支票数字)。
- 将结果的其余部分除以10(即Modulo 10操作)。如果剩余等于0,则将0用作支票数字,如果不是0,则从10减去剩余的数字以得出检查数字。
GS1检查数字计算器和详细文档在GS1的网站上在线。另一个官方的计算器页面显示,GTIN-13的机制对于全球位置编号/GLN是相同的。
例如,一盒组织的UPC-A条形码为“ 036000241457”。最后一个数字是支票数字“ 7”,如果其他数字正确,则支票数字计算必须产生7。
- 添加奇数数字:0+6+0+0+2+1+5 = 14。
- 将结果乘以3:14×3 = 42。
- 添加偶数数字:3+0+0+4+4 = 11。
- 将两个结果添加在一起:42 + 11 = 53。
- 要计算支票数字,请以(53/10)的剩余时间为(53 modulo 10),如果不是0,则从10中减去10。因此,校验数值为7。 )= 5剩余3; 10-3 = 7。
另一个示例:计算以下食物“ 010101010 x ”的支票数字。
- 添加奇数数字:0+0+0+0+0+0+0 = 0。
- 将结果乘以3:0 x 3 = 0。
- 添加偶数数字:1+1+1+1+1 = 5。
- 将两个结果添加在一起:0 + 5 = 5。
- 要计算支票数字,请以(5/10)的剩余时间为(5 modulo 10),如果不是0,则从10:IE(5/10)= 0 = 0剩余5; (10-5)= 5。因此,校验数字x值为5。
ISBN 10
十位国际标准簿编号的最终字符是计算出的支票数字,以便将每个数字乘以其在数字中的位置(从右侧计数)并拿走这些产品的总和Modulo 11为0。数字最远的数字在右边(乘以1乘以1)的是支票数字,选择使总和正确。它可能需要具有值10的值,该值表示为字母X。例如 ISBN 0-201-53082-1:产品之和为0×10 + 2×9 + 0×8 + 1×7 + 5×6 + 3×5 + 0×4 + 0×4 + 8×3 + 2×2 + 2 + 2 + 1×1 =99¶0(mod 11)。因此,ISBN是有效的。位置也可以从左计数,在这种情况下,支票数字乘以10,以检查有效性:0×1 + 2×2 + 0×3 + 1×4 + 5×5×5 + 3×6 + 0×7 + 8×8 + 2×9 + 1×10 = 143 = 0(mod 11)。
ISBN 13
ISBN 13(在2007年1月使用)等于在书的条形码下方发现的EAN-13代码。其检查数字的生成与UPC相同。
NCDA
自2004年以来使用的NOID Check Digit算法(NCDA)旨在在持久标识符中应用,并配有可变长度字符串的字母和数字字符串,称为扩展数字。它被广泛用于方舟标识符方案,并与方案(例如手柄系统和DOI)一起使用。扩展的数字被限制在betanumeric字符上,betanumeric字符是字母数字减去元音和字母“ L”(ELL)。当生成不太可能通过偶然形成单词的不透明字符串时,这种限制会有所帮助,并且不包含O和0或L和1。具有r = 29的质子radix,betanumeric retertoire允许该算法确保检测到单个单一的检测。字符串的字符和换位误差小于r = 29个字符的长度(超出其提供了稍弱的检查)。该算法概括为任何字符曲目,其质量radix r和字符串的长度小于R字符。
支票数字的其他示例
国际的
- 国际塞多尔号。
- ISSN代码或IMO号码的最终数字。
- 国际证券识别数字(ISIN)。
- 对像管理小组FIGI标准最终数字。
- 国际CAS注册人数的最终数字。
- Modulo 10检查信用卡帐户号中的数字,由Luhn算法计算。
- 也用于银行Giros(信用转移)中使用的挪威儿童(客户身份证号),
- 用于手机的IMEI 。
- 上次检查全球贸易标识号( GTIN )的EAN/UPC序列化中的数字。它适用于GTIN-8,GTIN-12,GTIN-13和GTIN-14。
- DUNS号码的最终数字(尽管计划更改,例如最终数字将在新的分配中自由选择,而不是作为支票数字)。
- 国际银行帐号中的第三和第四位(Modulo 97支票)。
- 国际标准文本代码中的最终数字。
- 在磁条带卡中编码的最终字符是计算的纵向冗余检查。
在美国
- 美国医疗保健行业国家提供商标识符的第十位数字。
- 邮政编码的最终数字。
- 北美Cusip编号。
- ABA路由运输号的最后一位(第九个)数字,这是美国使用的银行代码。
- 车辆识别号(VIN)的第九位数字。
- 亚利桑那州和佛罗里达州使用的梅奥诊所患者识别次数包括拖尾数字。
- 海关和边境保护条目的第11位数字。
在中美洲
- 基于Modulo 11的危地马拉税号(NIT - NúmeroDeDiendificaciónTributaria)。
在欧亚大陆
- 英国NHS编号使用Modulo 11算法。
- 西班牙财政识别号(NúmeroDediensificación财政,NIF)(基于Modulo 23)。
- 荷兰汉堡(BSN)(国家标识符)使用Modulo 11算法。
- 以色列Teudat Zehut (身份证)编号的第九位数字。
- 塞尔维亚和前南斯拉夫独特公民号码(JMBG)的第13位数字。 (但并非全部,由于错误或非居留性)
- 11位土耳其识别号的最后两个数字(土耳其: TCKimlikNumarası )。
- 14个字符的欧盟牛护照号码(从1到7的循环:参见英国牛运动服务)中的第九个角色。
- 冰岛Kennitala中的第九位(国家ID号)。
- Modulo 97在比利时和塞尔维亚银行帐号中检查数字。塞尔维亚有时还使用Modulo 11作为参考号。
- 匈牙利泰姬陵号码(社会保险号码)中的第九位数字。
- 对于印度的居民来说,名为Aadhaar的独特身份号码具有第12位的落后数字,该数字是通过Verhoeff算法计算的。
- 新加坡知识产权办公室(IPO)已确认了一种新格式,用于可注册知识产权的申请号(IP,EG,商标,专利,注册设计)。它将包括使用DAMM算法计算的检查字符。
- 中国公民ID号(第二代)的最后一位数字是由Modulo 11-2计算的,如中国古比亚(AKA国家标准)GB11643-1999所规定的,该GB11643-1999采用ISO 7064:1983。如果计算的检查数字为10,则使用'x'。
- 爱沙尼亚Isikukood (个人身份证代码)的第11位数字。
- 关于新加坡车辆登记板的最后一封信。
在大洋洲
演算法
著名算法包括:
- 卢恩算法(1954)
- Verhoeff算法(1969)
- DAMM算法(2004)