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算法”、“银行卡校验”,说的都是这个。
常见使用场景
- 支付表单提交前拦下输错的银行卡号
- 校验手造的信用卡测试号是否 Luhn 合法
- 核对一台手机的 IMEI 串号有没有抄错
- 排查 SIM 卡 ICCID 录入是否出错
- 给一段卡号主体补出正确的末位校验位
使用方法
- 把内容粘贴到输入框(生成类工具直接设置选项)。
- 按需要选择选项,点操作按钮。
- 结果出现在下方,点「复制结果」即可带走。