银行卡规范和校验

作者: PM回忆录 | 来源:发表于2020-04-04 21:44 被阅读0次

    前文

    截至2019年末,全国银行卡在用发卡数量84.19亿张,全国人均持有银行卡6.03张。 人均持有信用卡和借贷合一卡0.53张。2019年,全国共发生银行卡交易3219.89亿笔,金额886.39万亿元,同比分别增长53.07%和2.82%。2019年,银行共处理电子支付业务2233.88亿笔,金额2607.04万亿元。2019年,非银行支付机构发生网络支付业务7199.98亿笔,金额249.88万亿元,同比分别增长35.69%和20.10%。

    由上可见,银行卡在全国基本已普及,电子支付已经成为主流,企业和银行卡打交道在所难免,因此笔者整理了关于银行卡校验方面的知识。

    本文,将从三个方面介绍:

    银行卡号规范

    银行卡准确性校验

    使用接口校验银行卡准确性

    银行卡号规范

    银行卡号由13~19位数字组成,分为三个部分:

    1.发行者识别号码(Issuer Identification Number,缩写为IIN,也称BIN)。

    2002年,中国银联代国内各发卡机构统一向ISO(国际标准化组织)申请了800个在国内和国外通行的国际标准BIN(622126至622925)。其中第一位主要行业标识符,(Major industry identifier,缩写为MII),有以下类别(此类别的):

    0 - ISO/TC 68和其他行业分配

    1 - 航空业

    2 - 航空业,金融业和其他未来行业分配

    3- 旅游业和娱乐业

    4 - 银行业和金融业

    5 - 银行业和金融业

    6 - 商业和银行业/金融业

    7 - 石油业和其他未来行业分配

    8 - 医疗业,电信业和其他未来行业分配

    9 - 由各国标准团体分配

    2.自定义卡:

    IIN号码之后是6~12位的自定义卡号序列,表示个人账户号码。 每个银行的个人账号标识规则有所不同。有的银行在这部分内容中会包含分行、支行、储蓄网点等代码信息。有得银行可能就没有这么详细,会使用自然流水顺序码。

    3.校验码

    校验码是在确定了IIN码和自定义卡号之后,根据Luhn算法生成的一位数字。正因为有了校验码,我们可以根据Luhn算法来校验银行卡号的一般正确性。

    如,19位的银联卡其中1-6位代表发卡行,7-10位代表发卡地区,第11位代表卡种类,第12-18位为发卡顺序号,第19位为校验位.

    另外, 发行者识别号码一般由6位数字组成,但2014年底,国际标准组织(ISO)已经将IIN由6位数字调整到8位数字。目前国内银联卡,因银行众多,特别是村镇银行的存在,BIN长度以6位占绝大部分,另外还存在7、8、9、10等位数卡IIN。 另外一种即早期以9开头的银行卡,这些卡都是国内自行分配的,仅限国内使用,无法与国际进行接轨。

    虽然银行卡长度、规则不统一,但是其校验基本都可使用Luhn算法(除了早期发行的一部分银行卡外)。

    银行卡准确性校验-Luhn算法

    首先,在校验前,需要取出银行卡号,去掉最后一位校验位数字。然后

    第一步:从右边第1个数字开始每隔一位乘以2;

    第二步: 把在第一步中获得的乘积的各位数字相加,然后再与原号码中未乘2的各位数字相加;

    第三步:对于第二步求和值加上校验位,余10,结果为0则校验通过。

    举例:

    6259 6508 7177 2098

    第一步:6*2=12,5*2=10,6*2=12,0*2=0,7*2=14,7*2=14,2*2=4,9*2=18

    第二步:1+2 + 1+0 + 1+2 + 0 + 1+4 + 1+4 + 4 + 1+8 = 30

    30 + 2+9+5+8+1+7+0 = 62

    第三步:(62+8)%10=0

    校验通过。

    使用接口校验银行卡准确性

    只要是银联卡,我们都可以通过银联接口来校验其准确性,并查询银行卡相关信息。另外,也可以通过其他平台提供的接口来校验。

    银联银行卡信息验证

    接口地址(银联提供):https://open.unionpay.com/tjweb/api/detail?apiSvcId=21

    服务对象:需使用网络可信身份服务的信息主体

    产品详情:

    支持带全球范围带银联LOGO的银行卡(含国内全国性商业银行、股份制银行、区域性城商行、农信社、村镇银行等)验证

    银行卡信息验证支持5种模式:

    1.银行卡2要素(银行卡+姓名)认证:商户上传所要验证银行卡和银行卡持有人姓名信息,平台返回校验一致性信息;

    2.银行卡2要素(银行卡+证件号)认证:商户上传所要验证银行卡和银行卡持有人身份证信息,平台返回校验一致性信息;

    3.银行卡3要素(银行卡+姓名+证件号)认证:商户上传所要验证银行卡、银行卡持有人身份证和姓名信息,平台返回校验一致性信息

    4.银行卡4要素(银行卡+姓名+证件号+手机号)认证:商户上传所要验证银行卡、银行卡持有人身份证、姓名、手机号信息,平台返回校验一致性信息;

    5.银行卡6要素(银行卡+姓名+证件号+手机号+有效期+CVN2)认证:对于信用卡类型,综合数据服务平台提供银行卡持有人卡号、姓名、证件号、手机号、有效期、CVN2信息的6要素验证。

    由上,可以看出,银联接口支持五种方式的校验,最后一种主要用于信用卡。

    中国各大银行银行卡号查询:

    接口地址(支付宝提供):https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?cardNo=yourcardNo&cardBinCheck=true

    返回参数:{"bank":"GDB","validated":true,"cardType":"DC","key":"","messages":[],"stat":"ok"}

    描述:所属行:bank ,是否正确有效:validated 类型:cardType 状态:stat

    此接口为支付宝提供的,可以有效验证银行卡的准确性,同时还可以返回对应的所属银行名称。

    银行代码与名称对照表:https://github.com/digglife/cnbankcard/blob/master/bankname.json

    同时,支付宝还提供通过银行代码,来查询银行logo的api:https://apimg.alipay.com/combo.png?d=cashier&t=银行代码

    总结

    可以得知,银行卡号是具有一定的规范的,如果对信息准确性要求不高,只是简单校验卡号是否输入错误,可通过Luhn算法来校验。但如果涉及到用户信息的获取,则应该额外使用接口来验证银行卡准确性。

    另外,对于用户重要隐私信息,如银行卡密码,信用卡的CVN2、有效期,通常不建议存储,数据传输中,也需要做加密传输。


    欢迎关注作者其他写作平台,获取更及时的更新:

    公众号:pmhuiyilu

    个人网站:PM回忆录 | 专注产品思维/能力框架

    相关文章

      网友评论

        本文标题:银行卡规范和校验

        本文链接:https://www.haomeiwen.com/subject/tvbsphtx.html