Luhn算法(Luhn algorithm),也称为“模10”(Mod 10)算法,是一种简单的校验和算法,一般用于验证身份识别码,例如发卡行识别码、国际移动设备辨识码(IMEI),美国国家提供商标识(英语:National Provider Identifier)号码,或是加拿大社会保险号码(英语:Social Insurance Number)。该算法由IBM科学家Hans Peter Luhn(英语:Hans Peter Luhn)创造,专利于1954年1月6日申请,1960年8月23日颁证,美国专利号2950048。
该算法现已属于公有领域并得到了广泛的应用,例如ISO/IEC 7812-1。它不是一种安全的加密哈希函数,设计它的目的只是防止意外出错而不是恶意攻击。
Luhn算法会通过校验码对一串数字进行验证,校验码通常会被加到这串数字的末尾处,从而得到一个完整的身份识别码。
我们以数字“7992739871”为例,计算其校验位,设校验位为X并添加至数列末位,即7992739871X:
另一种方法是:
Luhn算法可以发现某一位的错误。Luhn算法几乎可以发现所有由于邻位上数字被交换产生的错误。但是,它只能发现数字交换产生的错误中的7/10,不会发现22 ↔ 55, 33 ↔ 66 或 44 ↔ 77。