1. 银行卡生成规则
银行卡一般为16位或者19位,根据不同银行或者不同银行的不同卡种生成

1.1. 银行bin码
BIN号即银行标识代码,英文全称是 Bank Identification Number。BIN由6位数字表示,出现在卡号的前6位,由国际标准化组织(ISO)分配给各从事跨行转接交换的银行卡组织。国内常见银行的bin号如下:

银行卡bin码不全为6位,其余见:银行卡bin码大全
1.2. 中间位
也是各个银行的自定义位,不同银行根据不同的规则生成,有些银行根据分行、支行等信息生成,也有的银行根据流水顺序生成
1.3. 校验位
根据LUHN算法生成,假如不包含校验码的字串为x,计算方法如下:
1.3.1. 从x的右边第1个数字开始,每隔一位乘以2
1.3.2. 把第一步中获得的乘积各位数相加得sum1
1.3.3. x中未乘2的各位数相加得sum2
1.3.4. sum=sum1+sum2,sum对10取模后得到m
1.3.5. 若n为0,则校验码为0,其余则为对应的10-n,即n对10得补数
举例:
不包含校验码的银行卡为6226634703308310
1. 02=0,32=6,02=0,32=6,72=14,32=6,62=12,22=4
2. sum1 = 0+6+0+6+(1+4)+6+(1+2)+4=30
3. sum2 = 1+8+3+0+4+6+2+6=30
4. sum=sum1+sum2=60
5. sum%10 = 0,所以校验码为0
2. python编码实现
2.1. 银行卡bin码生成
1 | def getBinNum(self, useRandom=True): |
2.2 中间位生成
1 | def getMidNum(self, useRandom=True): |
2.3 校验码生成
1 | def getLastcode(self, bankNumNoLastcode): |