在 App 里输错一位银行卡号,提交的瞬间就被拦下——这么快的「联网验证」,其实是纯本地数学。银行卡号自带一套自校验机制(Luhn 算法),这篇讲清它的原理、卡号里的隐藏信息,以及校验的能力边界。
6222 0211 1122 3456 78 类的长号,任抄错一位或相邻两位互换,总和就不再整除 10——错号当场现形。它拦下的是手误(输错、漏位、换位),覆盖了绝大多数输入错误,这也是它能被全球支付系统沿用的原因。
| 前缀 | 卡组织 |
|---|---|
| 62 | 银联(UnionPay) |
| 4 | Visa |
| 51–55、22–27 | Mastercard |
| 34、37 | American Express |
前几位(通常 6–8 位)叫 BIN(Bank Identification Number),能识别卡组织和发卡机构段;号段长度也随组织固定(银联常见 16–19 位、Visa/MC 16 位、Amex 15 位)。工具按这些规则给出「卡组织识别 + 长度校验 + Luhn 校验」三重判断。
问:为什么有的卡号是 19 位?
银联部分借记卡 19 位,各家发卡机构在标准内自定长度,工具按前缀对应的合法长度范围判断。
问:校验通过的号一定是真卡号吗?
不一定,只是数学合法。真实有效性只有发卡机构能确认。
问:开发者什么时候用得到它?
表单即时校验(省一次服务器请求)、测试数据造号(造合法格式的假卡号),是支付开发的基础件。