我们都曾经有过类似经历:当在网上输入信用卡号码,按回车键时,计算机显示卡号无效。仔细查对输入号码,发现输入错误。重新键入正确号码,问题解决,付款成功。
那么究竟网站如何确认号码是无效的呢?也许你会猜想,输入卡号送到信用卡公司数据库相比较后,发现错误数据不存在。事实也许并非如此。错误很可能是用一个简单一致性校验算法自动检测出来的。早在1954年,汉斯·彼得·卢恩发明该算法并取得专利。
卢恩生于德国,年轻时来到美国。上世纪二十年代中期,他开始在纺织业工作。由于他显示出卓越创造力,IBM公司聘用他为高级研发工程师。而后卢恩发明对计算机科学发展影响深远,包括以他名字命名的一致性校对算法——卢恩算法。
位数错误,顺序错误,重复输入,都经常出现在数据输入过程之中。为了检测这类经常发生错误,信用卡最后一位数字是校验位。金融机构发行卡号时,校验位值不是随机数,而是由一个公式计算出来的,其它位数值都与公式计算结果有关。同一个公式计算出校验值,与你在网上输入校验值比较。如果两者不同,卡号无效。
该过程只是更广泛领域(信号校验)一个实际应用。当电子信息发送时,由于无线网络信号不好,收到信息可能被改变。校验方法不仅可以确定发出信息准确,而且保证接收信息与其相同。没有完美无瑕的校验算法,只是有的算法比较好。其代价是复杂性,复杂程度越高,运算时间越长。好校验算法要根据实际需要,来权衡复杂性和计算时间之间的利弊。
卢恩算法很适合信用卡校验需要。人们发明更精准算法,但是还没有好到取代深深扎根在金融界的卢恩算法。卢恩算法不仅检测出大多数输入错误,并且令人难以置信的简洁。你可以在网上査到卢恩算法,验算你自己的信用卡号码。
你甚至可以用卢恩算法生成一个有效新信用卡号码,能通过网上基本校验。但是该号没有用处,除非它被发行过,并且你有其他相关信息,比如姓名、地址……不要被非法号码所诱惑,因为伪造信用卡号是严重违法行为。