信用卡校验位算法
星期四, 10月 19th, 2006<p>公司书架上看到这本<a href="http://www.oreilly.com.cn/book.php?bn=7-302-05951-9">《Web安全、隐私与电子商务》</a>就借回来看了一下,读到电子支付这一章,还真的发现一点很有意思的内容。</p><p>有一节介绍了支付卡校验位算法,记录一下算法:</p><p> </p><blockquote>1. 对卡号上的每位数字乘以权重。其规则是,如果卡号数字个数是偶数,则第一位乘以2,否则就乘以1,然后以后分别是,1,2,1,2,1,2;<br />2. 如果每位数字乘以权重后超过9 ,则需要减去 9;<br />3. 将所有的处理过的加权数字求和,用 数字 10 求模运算;<br />4. 余数应该是0,否则可能是输入错误。也可能是一个假号。</blockquote><p> </p><p>更为详细的例子参考<a href="http://www.oreilly.com.tw/product_security.php?id=a052_sample">O'Reilly 台湾站点样章对校验位的介绍</a>。</p><p>书中介绍这个算法是公开在 <acronym title="International organization for Standardization">ISO</acronym> 2894 中的,搜索了一下,这个算法叫做 <a href="http://www.mathematik.uni-bielefeld.de/~sillke/codes/luhn-method">The Luhn Mod-10 Method</a>。</p><p>有的网友可能会动起脑筋,那么是否可以伪造一个信用卡号码呢,嘿嘿嘿,不要忘了还有用户卡上的名字和三位验证码呢, 重要的是,书中告诉我们: <strong>盗用信用卡号码是犯罪行为</strong>.</p><p>顺便说一下,附录一的内容很适合初创公司的CEO阅读一下。</p>