关于银行卡号识别

绝大部分的银行卡号遵循luhn算法,luhn算法简述如下:

Luhn是著名的校验和算法也叫模10算法,主要应用于解决银行卡号,社保号等重要信息传输出错问题。

先来解释下算法原理,校验和类型的算法,一般是ID+校验号,校验号和ID号的每位相关,如果出错,通过某种运算能检测出这种改动。借用维基百科的例子我来解释下。
我们以数字“7992739871”为例,计算其校验位:
从校验位开始,从右往左,偶数位乘2(例如,7*2=14),然后将两位数字的个位与十位相加(例如,10:1+0=1,14:1+4=5);
把得到的数字加在一起(本例中得到67);
将数字的和取模10(本例中得到7),再用10去减(本例中得到3),得到校验位。


但在实际中我们发现有些银行发行的卡号并不遵循该算法,如民生银行的卡号:6226 2210 1942 5170,根据luhn算法,最后的校验位应该是3而不是0,所以对于银行卡号的正确性判断简化为以下方式:

1、银行卡号长度为16位~19位

2、银行卡号每一位都是数字

3、根据银行卡号前几位和卡bin库中的卡bin进行比对,识别为哪个银行的卡号(卡bin的长度为2到10位不等)

4、如果通过卡bin判断不出是哪个银行的卡号,那么让用户选择这个银行卡号是属于哪个银行(毕竟卡bin库也是需要定期更新的,对于新发行的银行卡卡bin不一定在该库中存在)



你可能感兴趣的:(算法)