银联银行卡号校验
这个话题还是很有意思的,银行卡号有点类似于身份证号的设计。
银行卡的卡号长度及结构符合ISO 7812-1 有关规定,由13-19位数字表示,具体由以下几部分组成:
发卡行标识代码 | 自定义位 | 校验位 |
---|---|---|
XXXXX | X……X | X |
其中校验位是通过一个名为Luhn的校验算法得出的。
然而实际上一些商业银行不遵守这个规范,所以导致Luhn设计被废弃了,具体可以见这个Github Issue的讨论。
现在更推荐使用一些开放平台提供的API接口来实现,比如支付宝开放平台以及中国银联开放平台。
中国银联开放平台有准入门槛,需要先申请,如果只是做银行卡是否有效的验证,不校验对应所有人身份信息的话可以直接用支付宝提供的接口。
接口请求示例:
1 | curl "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=银行卡卡号&cardBinCheck=true" |
比如我们请求:
1 | curl https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo=6214832018989180&cardBinCheck=true |
我们可以拿到请求结果为:
1 | { |
bank
字段返回的CMB
则可以通过支付宝开放平台-文档中心:银行简码——混合渠道查阅得知这是招行银行的卡cardType
字段则用于区分是借记卡(DC
)还是贷计卡(CC
)
这里需要注意的是支付宝开放平台-文档中心:银行简码——混合渠道这篇文章是2015年所写的,一直也没有更新,只是个局部参考,如果真的要相对稳定的接口,还是建议使用中国银联开放平台。
注:
- 支付宝开放平台-文档中心:银行简码——混合渠道这篇文章是2015年所写的,一直也没有更新,只是个局部参考,如果真的要相对稳定的接口,还是建议使用中国银联开放平台;
- 支付宝的这个接口其实也支持其他卡组织的卡号校验(境外卡号我没有试过);
本文参考: