作者:王家威
链接:https://zhuanlan.zhihu.com/p/27289413
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
互联网金融产品的绑卡操作是核心功能,怎么根据用户提供的银行卡号来识别开户行和银行卡种类?如何识别用户银行卡信息的有效性,本文将通过分析银行卡号的编码规则来告诉大家一、银行卡格式
银行卡的格式如:xxxxxx xxxx x xxxxxxx x
我国银行卡的长度一般在13-19位,银联标准卡长度一般是16-19位。其中信用卡的长度为16位,借记卡的长度为19位。
银行卡号一般有五部分组成:发卡机构标识代码(BIN)、地区代码、卡种类码、顺序码、校验码。
1.发卡行标识码(BIN)
卡号左起前6位是发卡机构标识代码(BIN),一般由6位数字组成。发卡行标识代码Bank Identification Number(BIN),又叫发卡机构标识代码Issuer Identification Numbers(IIN),是由国际标注组织(ISO)制定和非配的。目前银联标准卡易62开头,各银行再向银联申请,如621226、622848开头的分别为工商银行和农行的借记卡。
另外,银联卡不都是以62开头,主要有2种情况。第一种是双组织卡,如银联、运通双组织卡,一般以信用卡居多,如招行与运通合作的运通卡。另外一种即早期以9开头的银行卡,这些卡都是国内自行分配的,仅限国内使用,无法与国际进行接轨。以下为部分常见卡组织发行的银行卡起始数字:
通过卡BIN能获得该卡的开户行、种类、卡号长度、卡名称等信息,是进行银行卡有效性验证的关键信息。根据数据库存储的BIN数据与用户输入的卡号的BIN信息进行匹配,就可以判断银行卡的发卡行、种类等,数据库存储的BIN数据越完善,判断越准确。目前支付宝、微信等大部分支付平台都是用这个方法进行判断的。以下为部分卡BIN:
2.地区代码
第7-10位代表发卡地区,用于识别城市和网点
3.卡种类代码
第11位表示卡种类码
4.顺序码
第12-18位代码是顺序码,是发卡行编制的,可以理解为银行卡的编码顺序
5.校验码
银行卡号最后一位是校验码,采用LUNH算法,也称为模10算法计算得出。
二、校验码算法(LUNH算法)
第一步:从银行卡号本位码(不含校验码)的最后一位开始,将奇数位乘以2相加
第二步:将第一步计算的结果与卡号中未乘2的各位数字相加
第三步:将10减去第二步计算结果的个位数,即个位数求10的补数;若个位数为0则检验码为0.
例如:
某银行卡本位码是: 622326321600570645
第一步:2*2+3*2+6*2+2*2+6*2+0*2+7*2 + 6*2+5*2=74
第二步:74+6+2+2+3+1+0+5+0+4=97
第三步:10-7=3
因此,该银行卡的校验码是3,完整的银行卡号是:6223263216005706453
三、编码格式的应用
1.根据银行卡编码格式,判断用户所输银行卡号的有效性,如不符合银行卡编码格式则可能出现输入错误或胡乱输入的场景,则进行友好提示;
2.根据BIN码判断用户输入的银行卡号与所选择的开户行,以及卡种类,是不是信用卡等;
3.根据银行卡编码规则及卡BIN规则,平台自行搭建一套卡BIN读取系统及相应数据,响应速度更快,同时会节省一大笔接口调用费用(每次接口调用费用大概2-4元,根据用户量可以节省几十上百万的费用)。
在绑卡之前通常需要进行实名认证,就涉及到我上一篇文章:金融支付:身份证号码的编码规则大家可以查看这篇文章,便于更好的理解银行卡号的编码规则及其应用。
作者简介:本人为互联网金融公司产品经理一枚,先后负责了公司第三方支付资金存管系统对接和银行资金存管系统的对接。接下来我将更新【金融支付】系列文章,分享自己的项目经历,希望能给大家带来价值。
欢迎关注我的个人公众号:威理(ID:weili201608) 交流互联网金融支付产品设计