银行卡号编码规则及其应用

绑卡时输入银行卡号后识别出银行和卡种是如何做到的?为什么能够在卡号输入有误时进行友好提示?本篇文章将为大家揭晓。

一、银行卡结构

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数据,就能判断出银行卡发卡行及卡种。目前支付宝、微信等大部分主流需要绑卡的应用都是如此实现。

二、自定义位

发卡行自定义位,一般在6-12位。

三、校验码算法

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

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

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

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

举例:625650717209(不含校验码的银行卡号)

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

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

时间: 2024-08-01 20:31:27

银行卡号编码规则及其应用的相关文章

BASE64编码规则及C#实现

编码   一.编码规则      Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24位数据,再把这24位数据分成4组,即每组6位.再在每组的的最高位前补两个0凑足一个字节.这样就把一个3字节为一组的数据重新编码成了4个字节.当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节.这时在最后一组填充1到2个0字节.并在最后编码完成后在结尾添加1到2个"=".  例:将对AB

UTF-8编码规则【转】

hz_chenwenbiao UTF-8编码规则(转) UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现. UTF-8是一种变长字节编码方式.对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0:如果是多字节,其第一个字节

数据库中如何根据特定的编码规则取出数据?

问题描述 数据库中如何根据特定的编码规则取出数据? 现在有一系列数据,其主键是以特定的编码规则形成的. 例如0020150601,后面8位就代表时间了. 如果我想从数据空中取出2015年6月1号到2015年6月30号的数据,应该怎么办啊? 不要做30次查询啊,有什么好办法吗? 急,在线等 解决方案 select * from tbXXX where substring(id,3,6)='201506' 解决方案二: substring取值后的逻辑条件可以改成 > 或 < 就可以实现任意时间段

山西在全国率先出台单用途商业预付卡规模以下发卡企业备案号编码规则

根据商务部<单用途商业预付卡管理办法(试行)>的规定,近日,山西省商务厅在全国商务系统率先制定出台了<山西省商务部门单用途商业预付卡规模以下发卡企业备案号编码规则(试行)>,该规则实行12位编码制,其中前两位为所属地级市编码,第3-5位为所属县编码,第6-7位为所属行业编码,最后5位为企业流水号.规则对于全省各地级市和各县(市.区)进行了专属编码,并对行业进行了分类编码.该规则的出台标志着山西省单用途商业预付卡规模以下发卡企业备案工作进入了实施阶段.

《Abaqus GUI程序开发指南(Python语言)》——2.3 Python的编码规则

2.3 Python的编码规则 2.3.1 代码缩进在一般的编程语言中,例如,C.C++.FORTRAN.VB以及Java等语言,代码的缩进是程序员个人主观的编程习惯,它可以辅助程序员清晰辨别代码块,快速阅读和理解代码,代码的缩进位置不会影响程序的执行.但是在Python语言中,代码的缩进是一种语法,Python依靠每行代码的缩进位置来判断代码的分块.区分代码块之间的层次关系,错误的缩进位置将会导致程序执行错误,通常在出现由于缩进位置导致的错误时系统会提示"IndentationError&qu

Oracle数据库应遵循的PL/SQL编码规则

提高编写PL/SQL代码数量及质量的四个简单易行指导方针 我从1990年就开始编写PL/SQL代码.这意味着我已经编写了几万行的软件代码,但我确信,其中的绝 大多数代码都非常拙劣,而且难以维护. 幸运地是,我发现找到并遵循编写出更好代码的新方法还为时不晚.就是在去年,我的代码质量有了 显著改进:这些改进主要是由于制定了一些简单的规则,并像纪律一样加以遵守. 本文为PL/SQL新手及有经验的开发人员提出了四条建议:遵守其中任何一条,你的代码质量都会有提 高.这四点建议都采纳,你可能会惊奇地猛然发现

身份证号编码规则

编码 15位的身份证号dddddd yymmdd xx p18位的身份证号dddddd yyyymmdd xx p y其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同yyyymmdd yymmdd 为出生年月日xx顺号类编码p性别18位中末尾的y为校验码,在网上可以找到算法将前17位的ascii码值经位移.异或运算结果不在0-9的令其为x

utf8编码规则

UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所以可以看出unicode是给出一个字符的范围,定义了这个字是码值是多少,至于具体的实现方式可以有多种多样来实现. UTF-8是一种变长字节编码方式.对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0:如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位

程序员需要谨记的九大安全编码规则

历史已经证明,软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首.安全专家发现,多数漏洞源自常见软件中相对有限的一些漏洞.软件开发者和设计者应当严格检查程序中的各种错误,尽量在软件部署之前就减少或清除其中的漏洞.     下面列举的这些方法会有助于开发人员提高编码的安全性:     一.注意编译器警告     程序员应当使用编译器的最高警告等级.在编译过程中,应当修改程序中的错误,直到警告解除.应当使用静态和动态的分析工具来检测和清除安全缺陷.     二.根据安全策略设置软件架构