编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 哈希加密 / Luhn校验

Luhn校验

用 Luhn 算法校验号码。

输入
结果

这个工具能做什么

这个工具做的是一件很具体的事:把你输入的一串数字按 Luhn 算法(又叫模 10 算法)完整跑一遍,判断它末位的校验位是否自洽,从而快速完成银行卡校验、信用卡号验证以及 IMEI 串号这类带校验位号码的卡号校验。日常开发里最常见的痛点,是用户在表单里手输卡号时漏敲、多敲或把相邻两位敲反,这些错误肉眼很难发现,往往要等到提交支付或调用接口时才报错。先用它做一遍 Luhn 校验,能在提交之前就拦下大部分低级输入错误。号码在浏览器本地计算,不上传到服务器。

Luhn 算法的核心是一个带加权的模 10 校验。从号码最右边的校验位往左数,把倒数第二位、第四位……这些偶数位置的数字各乘以 2,乘积若大于 9 就减去 9(等价于把这个两位数的各位相加),其余奇数位置的数字保持不变;随后把所有处理过的数字求和。如果这个总和能被 10 整除,号码就通过 Luhn 校验,否则判为不合法。反过来,如果已知前面的主体数字、需要补出正确的校验位,只要对主体按同样规则求和,校验位取 (10 − 和 mod 10) mod 10 即可,本工具在判定不合法时也会顺带给出这个应有的校验位。

典型用法有几类。做支付或电商前端时,可以在卡号输入框失焦后立刻跑一次 luhn 校验,配合卡号前几位(BIN)判断卡组织,就能在用户还没点提交时提示「卡号可能输错了」,省下一次无谓的网络请求和风控记录。测试同学准备用于银行卡校验、信用卡号验证的测试数据时,也常用它确认自己手造或脚本生成的号码是不是 Luhn 合法,避免测试用例本身就过不了校验。此外,核对一台手机的 IMEI 有没有被抄错、排查 SIM 卡 ICCID 的录入问题,同样可以直接把号码贴进来验证。

需要强调,Luhn 只是一个防手滑的校验位算法,通过校验仅代表这串数字在格式上自洽,并不代表这张卡真实存在、已开通或有余额——卡是否可用仍要走发卡行或支付通道,别把 Luhn 当成鉴权手段。它的检错能力也有边界:能查出全部单个数字写错的情况,以及绝大多数相邻两位写反的情况(09 与 90 互换是个例外),但对 22↔55、33↔66、44↔77 这类「孪生位」互换等复杂错误无能为力。另外,输入前请去掉空格和连字符、只保留纯数字;不同号码的长度规则(如银行卡通常 13–19 位、IMEI 固定 15 位)由各自标准约定,Luhn 本身并不校验长度。

Luhn校验是一个免费的在线工具,打开网页就能用,不用下载也不用注册。平时大家搜的“luhn校验”、“luhn算法”、“银行卡校验”,说的都是这个。

常见使用场景

使用方法

  1. 把内容粘贴到输入框(生成类工具直接设置选项)。
  2. 按需要选择选项,点操作按钮。
  3. 结果出现在下方,点「复制结果」即可带走。

常见问题

Luhn 校验通过就说明这张银行卡真实有效吗?
不能。Luhn 只验证校验位是否自洽,能挡住手误输错,但卡是否真实存在、是否开通、有没有余额,只有发卡行或支付通道才能确认。
这个工具支持验证哪些号码?
凡是采用 Luhn/模 10 校验位的号码都可以,常见的有银行卡号、信用卡号、IMEI 手机串号、SIM 卡 ICCID,以及部分国家的社保号等。
Luhn 算法算加密或哈希吗?
不算。它只是一个用于检错的校验位算法,输出的是一位校验数字,既不加密也不防篡改;要做数据摘要或防篡改,应改用 MD5SHA 等哈希算法。
卡号里带空格或连字符能识别吗?
建议先去掉空格和「-」只留纯数字。多数实现会先剥离分隔符再计算,如果结果异常,先检查是不是混入了字母或全角字符。
我的号码为什么校验不通过?
常见原因是某一位敲错、相邻两位敲反,或末位校验位算错。工具会给出该主体对应的正确校验位,可对照末位确认是不是校验位写错了。

相关工具

查看全部「哈希加密」工具 →

相关名词解释