项目背景
在现代支付系统中,信用卡(Credit Card)仍然是全球最重要的支付工具之一。无论是电商平台、SaaS 订阅系统、线下 POS 终端,还是移动支付网关,在接收信用卡号时都必须进行基础合法性校验。
如果不进行验证,可能会导致:
- 无效数据进入数据库
- 支付接口频繁失败
- 欺诈风险上升
- 系统性能浪费
- 客户体验下降
信用卡号校验主要分为两类:
- 格式校验(长度、前缀、数字)
- Luhn 算法校验(校验位验证)
其中,Luhn 算法(也称为模 10 算法)是全球通用的银行卡校验标准。
项目需求
基础需求
实现函数:
func IsValidCreditCard(number string) bool
判断字符串是否为合法信用卡号码。
合法信用卡必须满足
- 非空
- 仅包含数字(可自动去除空格)
- 长度在 13–19 位之间
- 通过 Luhn 校验算法
- 可选:支持常见卡类型识别
合法示例(测试号)
4111111111111111 // Visa
5500000000000004 // MasterCard
340000000000009 // American Express
非法示例
1234567890123456
4111111111111112
abcd123456
相关技术
信用卡结构
典型结构:
[发卡机构标识] + [账户号] + [校验位]
长度:
- 13–19 位
- 最后一位是 Luhn 校验位
Luhn 算法原理
步骤:
- 从右向左遍历数字
- 每隔一位乘以 2
- 若乘积大于 9,则减 9
- 所有数字求和
- 总和 % 10 == 0 则合法
示例:
卡号:4111111111111111
计算后总和 % 10 == 0 → 合法
常见卡类型前缀
| 类型 | 前缀 |
|---|---|
| Visa | 4 |
| MasterCard | 51–55 |

