通过MCP连接 →

输入计算

数学公式

广告

结果

Luhn 校验结果
VALID
数字位数 11
Luhn 累加总和 70
总和对 10 取余 0
校验位(末位) 3

什么是 Luhn 算法?

Luhn 算法又称"mod 10"算法,是 IBM 科学家 Hans Peter Luhn 于 1954 年发明的一种简单校验和公式。它广泛用于验证各类标识号码,例如信用卡和借记卡卡号、手机 IMEI 序列号,以及许多国家的身份证件号码。该算法能够发现单个数字的录入错误以及大多数相邻数字互换的错误,但请注意:它并非加密级别的安全机制,仅仅是一种基础的数据完整性校验手段。

如何使用本工具

在输入框中填入你想要验证的号码(其中的空格和连字符会被自动忽略)。工具会逐位处理这些数字,套用 Luhn 校验和算法,并告诉你该号码是有效(VALID)还是无效(INVALID),同时显示累加总和、总和对 10 取余的结果,以及末位的校验位。

算法公式详解

从右往左依次读取每一位数字。最右侧的校验位保持不变,然后将每隔一位的数字翻倍。如果翻倍后的结果大于 9,就减去 9(这等同于把它的两位数相加,例如 \(8\times 2=16 \to 1+6=7\))。把处理后得到的所有数值相加。如果总和能被 10 整除,该号码即通过 Luhn 校验。

$$\text{Valid} \iff \left(\sum_{i=0}^{n-1} f(d_i)\right) \bmod 10 = 0 \\[1.5em] \text{where}\quad \left\{ \begin{aligned} d_i &= i\text{-th digit of } \text{Number} \text{ (from right)} \\ f(d_i) &= \begin{cases} d_i & i \text{ even} \\ 2d_i - 9\,[2d_i>9] & i \text{ odd} \end{cases} \end{aligned} \right.$$

展示卢恩算法从右侧开始数字翻倍的扁平示意图,隔位数字被翻倍并求和
卢恩算法从右往左将每隔一位的数字翻倍,然后将所有数字相加。

实例演示

以号码 79927398713 为例。从右往左将每隔一位的数字翻倍,并把超过 9 的结果减去 9 后,得到一组调整后的数字,其总和为 70。由于 \(70 \bmod 10 = 0\),因此该号码有效

展示卢恩校验以模10测试结尾、分支为有效或无效的扁平流程图
如果总和能被10整除,该号码即有效。

常见问题

Luhn 校验通过,是否就代表这张卡是真实有效的?不是。它只能确认号码的格式正确,并不能验证账户是否真实存在或是否有余额。

可以输入哪些字符?只有数字会参与计算;空格、连字符及其他符号都会在计算前被自动去除。

翻倍后为什么要减去 9?对超过 9 的翻倍结果减去 9,得到的值与把它的两位数相加完全一致,而这正是 Luhn 算法原始规则所要求的。

最后更新: