号码校验

来自计算思维百科
跳转至: 导航搜索
号码校验1.jpg

号码校验是对输入的号码进行校验以识别号码的有效性。

在购物时,如果对方在他们的机器中输入你的信用卡号码时,不小心输错了一位(尤其是相邻的两个数字写错,如将899写成了889),那么可能就有别人为你买单了。在输入税务标志号、飞机票密码或护照号码事出错,则可能会通过电子系统传播开来,从而造成越来越多的混乱。那么要如何对号码进行校验呢?

解决方案

信用卡号检验方案

很多公司采用美国国际商用机器公司(IBM)引入的12位或16位数字信用卡号的校验系统,手工操作该过程比较费力,但用机器就可以瞬间检查完毕,如果识别出卡号输入有误或是伪造的,校验机器就会将其驳回。

假设一张银行卡的卡号为:4000 1234 5678 9314。首先,从第一位开始从左到右每隔一位抽出一个数字(即奇数位上的数字),4000 1234 5678 9314,分别乘以2,得到数字8 0 2 6 10 14 18 2,然后,将上述两位数即10 、14、 18的十位和个位上的数字相加得到1、5、9。现在得到的数字就是8、0、2、6、1、5、9、2,将这些数字加起来,然后加上原卡号中所有偶数位上的数字,最后得出总和8+0+0+0+2+2+6+4+1+6+5+8+9+3+2+4=60。如果卡号有效,那么经过上述计算后的总和必须能够被10整除。而如果卡号为4000 1234 5678 9010,最后算出的总和是53,则不能被10整除,那么这个银行卡号是无效的。

该校验系统能大量识别出简单的输入和读数错误,可以检查出所有单个数字的错误和大多数相邻数字顺序颠倒的问题。

商品校验码

有一种常见的校验数字条形码叫做通用产品代码(UPC)。它最初与1973年用于杂货店产品上,后传播开来,到现在所有商店上几乎都贴有UPC码了。这种条形码有12位数字,呈线状,用激光扫描仪就可以读取。UPC码由四部分组成:两个单独的数字之间有两组数串,每组5个数字,比如数码相机的盒子上标有0 74101 40140 0。其中,第一位数字表示产品的种类:所有种类的产品分别用0、1、6、7、9表示,2表示奶酪、水果和蔬菜这类计重出售的产品,3表示药物和保健物品,4表示降价或凭商店会员卡可优惠的产品,5表示凭优惠券等优惠的产品。接下来的五个数字表示生产厂家用来识别产品大小、颜色等价格之外的东特征,最后一位数字是校验数字。有时数字并没有印刷上去,而只用条形码表示,读码器同样能接受或否定UPC码。下面是UPC码的生成过程:将奇数位上的数字相加0 74101 40140 0,0+4+0+4+1+0=9,乘以3得到27,再加上偶数位的数字就得到最后结果27+7+1+1+0+4+0=40,最后检查是否能被10整除。

条形码的两端两个单个数字之间的空间被分成了七个部分,分别填充着一层黑色印记,这些印记涂层随着它们代表的数字而明暗不一。在所有UPC码的两端,都有两条平行且宽窄相同的“护栏”,用于决定中间线条的宽窄和间隔。在这个护栏中间,有四组相似的主要码,有时其中两组较另两组长一些,这样就能将厂家身份标识和产品信息区别开来,而不会掺杂其他信息。条形码的实际位置和宽窄形成了由0和1组表示的二进制代码:用一个二进制的奇数来编码厂家信息,偶数编码产品信息。这样就可以避免两者的混淆,而且能够让扫描器从左到右或从右往左读数事都能清楚自己读取的信息。

号码校验2.png

运用的计算思维

校验码的设置在出现错误时能够及时纠正,体现了计算思维中的“容错纠错”特点。