zoukankan      html  css  js  c++  java
  • 银行卡编码规则及检验算法详解

    原文: https://blog.csdn.net/wmlml/article/details/54345413

    这里写图片描述

    一、银行卡结构

    XXXXXX XXXXXXXXXXXX X

    发卡行标识代码 自定义位 校验码

    根据ISO标准,银行卡长度一般在13-19位,国际上也有12位的。银联标准卡卡长度一般是在16-19位,双组织卡也有13-19位的。

    二、发卡行标识代码

    发卡行标识代码Bank Identification Number(BIN),又叫发卡机构标识代码Issuer Identification Numbers(IIN)。一般由6位数字组成,2014年底,国际标准组织(ISO)已经将BIN由6位数字调整到8位数字。目前国内银联卡,因银行众多,特别是村镇银行的存在,BIN长度以6位占绝大部分,另外还存在7、8、9、10等位数卡BIN。

    发卡行标识代码第一位,为发卡行业标识号Major Industry Identifier(MII),代表的是发卡机构所处行业。具体分配规则如下:

    这里写图片描述

    目前银联标准卡以62开头,各银行再向银联进行卡BIN申请,如622848开头的卡为农行借记卡。我们发现,银联卡不都是以62开头,主要有2种情况。第一种是双组织卡,如银联、运通双组织卡,一般以信用卡居多,如招行与运通合作的运通卡。另外一种即早期以9开头的银行卡,这些卡都是国内自行分配的,仅限国内使用,无法与国际进行接轨。以下为部分常见卡组织发行的银行卡起始数字:

    这里写图片描述

    银联卡,通过卡BIN能获取到的信息不仅仅是发卡行,还能确定该卡卡种、卡名称、卡号长度等信息。以下为部分卡BIN信息列举:

    这里写图片描述

    【国内银行卡BIN号速查简表】(资料详见:http://wenku.baidu.com/view/1d93ebeb856a561252d36fb3.html

    因此,只要能获取到比较全面的卡BIN数据,就能判断出银行卡发卡行及卡种。目前支付宝、微信等大部分主流需要绑卡的应用都是如此实现。

    三、自定义位

    发卡行自定义位,一般在6-12位。 
    中间位数由发卡行自定义,一般由6-12位数字组成。最多可以使用12位数字。

    每个银行的个人账号标识规则有所不同。有的银行在这部分内容中会包含分行、支行、储蓄网点等代码信息。有得银行可能就没有这么详细,会使用自然流水顺序码

    四、校验码算法

    校验码为银行卡号最后一位,采用LUHN算法,亦称模10算法。计算方法如下:

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

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

    第三步:对于第二步求和值中个位数求10的补数,如果个位数为0则该校验码为0。

    举例:

    6259 6508 7177 209(不含校验码的银行卡号)

    第一步: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

    第三步:10-2=8

    所以,校验码是8,完整的卡号应该是6259650871772098。

    目前银联卡几乎都支持校验码算法,但是也不排除极个别不支持此算法的,如杭州银行早期发行的西湖卡。

    注:本文摘录于不同地方,并经实践整理所得,望交流。

  • 相关阅读:
    原生js设置cookie
    vuex数据持久化存储
    export和export default的区别
    userAgent判断是微信还是企业微信
    SVN的使用方法
    Js字符串反转
    通用JS10——一元加和减
    通用JS十——递增/递减操作符
    通用JS9
    @SuppressWarning注解用法
  • 原文地址:https://www.cnblogs.com/jiftle/p/9463842.html
Copyright © 2011-2022 走看看