美文网首页
Luhn算法

Luhn算法

作者: 团长plus | 来源:发表于2018-07-30 10:56 被阅读299次

    维基百科,自由的百科全书

    Luhn算法(Luhn algorithm),也称为“模10”(Mod 10)算法,是一种简单的校验和算法,一般用于验证身份识别码,例如发卡行识别码国际移动设备辨识码(IMEI),美国国家提供商标识号码,或是加拿大社会保险号码。该算法由IBM科学家Hans Peter Luhn创造,专利于1954年1月6日申请,1960年8月23日颁证,美国专利号2950048[1]

    该算法现已属于公有领域并得到了广泛的应用,例如ISO/IEC 7812-1[2]。它不是一种安全的加密哈希函数,设计它的目的只是防止意外出错而不是恶意攻击。

    描述[编辑]

    Luhn算法会通过校验码对一串数字进行验证,校验码通常会被加到这串数字的末尾处,从而得到一个完整的身份识别码。

    我们以数字“7992739871”为例,计算其校验位:

    1. 从校验位开始,从右往左,偶数位乘2(例如,7*2=14),然后将两位数字的个位与十位相加(例如,10:1+0=1,14:1+4=5);
    2. 把得到的数字加在一起(本例中得到67);
    3. 将数字的和取模10(本例中得到7),再用10去减(本例中得到3),得到校验位。
    image.png

    另一种方法是:

    1. 从校验位开始,从右往左,偶数位乘2,然后将两位数字的个位与十位相加;
    2. 计算所有数字的和(67);
    3. 乘以9(603);
    4. 取其个位数字(3),得到校验位。

    优缺点[编辑]

    Luhn算法可以发现某一位的错误。 Luhn算法几乎可以发现所有由于邻位上数字被交换产生的错误。 但是,它只能发现数字交换产生的错误中的7/10,不会发现22 ↔ 55, 33 ↔ 66 或 44 ↔ 77。 。

    相关文章

      网友评论

          本文标题:Luhn算法

          本文链接:https://www.haomeiwen.com/subject/qnwxvftx.html