一、银行卡
(1)卡号规则
银行卡卡号长度一般是15-19位,常见的是18位、19位。最后一位是校验位,它是怎么校验的呢??如果你学会了该算法,可以在Excel中设置一个校验公式,当用户输入了错误的银行卡时,给予提示,如果你是软件开发者,学会改算法,可以校验用户输入的银行卡是否正确。
(2)方法/步骤
(3)图解方法
图解:
设卡号:
1 3 8 6 2 6 7 1 8 check
×2 = 2 16 4 14 16
--------------------------------------------------------------
2 +3+1+6+6+4+6+1+4+1+1+6 = x
判断 (( x + check )%10 == 0 )表达式是否为真即可。
(4)代码
-
BOOL LuhmCheck( LPCSTR lpszCard, BOOL bCheck = TRUE )
{
int nLength = strlen( lpszCard );
if( nLength != 16 && nLength != 19 )
return FALSE;
if( !bCheck )
return TRUE;
int nCheck = ( lpszCard[ nLength - 1 ] - '0' );
int sum = 0;
nLength -= 2;
for( int i = 0; i <= nLength; ++ i )
{
int j = nLength - i;
int w = lpszCard[ j ] - '0';
if( i % 2 == 0 )
{
int n = w * 2;
if( n > 9 )
{
sum += ( n % 10 );
sum += ( n / 10 );
}
else
sum += n;
}
else
{
sum += w;
}
}
if(( sum + nCheck ) % 10 == 0 )
return TRUE;
else
return FALSE;
}
二、信用卡
(1)卡号规则:
信用卡卡号规则及识别办法:
发卡银行 |
卡种 |
位数 |
特征 |
中国银行 |
长城卡 |
16 |
首位数字为‘8’(8030为上海卡)或前6位为‘547766’、‘558868’、‘518378’、‘518379’、‘518474’、 ‘518475’、‘518476’、‘424106’、‘424107’、‘424108’、‘424109’、‘424110’、‘424111’ 、 ‘438088’、‘438089’、‘356833’、‘356835’ |
中国工商银行 |
牡丹卡 |
16 |
前5位‘45806’、‘53098’、‘42701’、‘42702’、‘42703’、‘55836’、‘53099’、‘53097’, 前6位‘451804’、‘451810’、‘451811’、‘458071’, 第6位至第9位‘0348’和第7位至第10位‘0348’、‘0350’为上海卡 |
15 |
前6位‘370246’、‘370247’ |
||
中国建设银行 |
龙卡 |
16 18 |
前5位:53242(后3位‘269--289’为上海卡), 前6位:544033、453242(后3位‘226--289’为上海卡)、491031 前6位:553242,前7位4033、5453242、5491031 前六位:526410,524094,552245,421349,434061,434062 |
龙卡国际普通卡VISA |
16 |
4367 4500、4367 4502(需提供背面7位校验码后3位) |
|
龙卡国际金卡 VISA |
16 |
4367 4800、4367 4802(需提供背面7位校验码后3位) 436718、436738 |
|
龙卡国际普通卡MASTER |
16 |
5324 5000、5324 5050、5324 5002(需提供背面7位校验码后3位) |
|
龙卡国际金卡 MASTER |
16 |
5324 5800、5324 5850、5324 5802(需提供背面7位校验码后3位) |
|
中国农业银行 |
金穗卡 |
16 |
前五位:49102,53591 |
中国交通银行 |
太平洋卡(上海地区) |
16 |
53783,49104 (第7到9位为011) 62225(第7到9位为011)(需提供背面7位校验码后3位) |
中国招商银行 |
国际卡 |
16 |
前5位:439188,(VISA)439225,439226,(MASTER)518710,518718 |
广东发展银行 |
广发卡 |
|
前六位:491032, 491033, 491034, 491035, 491036, 491037, 491038, 493427, 436768, 436769, 436770, 436771, 428911, 406365, 406366, 548844, 518364, 541709, 541710, 520152, 520382 |
光大银行 |
阳光卡 |
16 |
前七位:4062540,4062520,4062521 前八位:40625220,40625221,40625222,40625223,40625224 |
民生银行 |
信用卡 |
16 |
前六位:421869, 421870, 421871, 407405, 517636, 512466, 528948, 552288, 556610 |
中信银行 |
信用卡 |
16 |
前六位:403391, 403392, 403393, 404157, 404158, 404159, 518212, 520108, 514906, 556617, 558916, 433667, 433666 |
上海浦东发展银行 |
信用卡 |
16 |
前六位:407438, 404739, 498451(需提供背面7位校验码后3位) |
外卡 |
VISA(威士) |
13,16 |
4 |
外卡 |
MASTER(万事达) |
16 |
51-55 |
外卡 |
AMEX(运通) |
15 |
34,37 |
外卡 |
DINNERS(大来) |
14 |
300-305,36,38 |
外卡 |
JCB |
16 15 |
3 2131,1800 |
例如:Test VISA credit card number: 4005550000000019
Test Credit Card Numbers | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Test Credit Card Numbers: |
|
Visa: | 4111-1111-1111-1111 |
MasterCard: | 5431-1111-1111-1111 |
Amex: | 341-1111-1111-1111 |
Discover: | 6011-6011-6011-6611 |
Credit Card Prefix Numbers: | |
Visa: | 13 or 16 numbers starting with 4 |
MasterCard: | 16 numbers starting with 5 |
Discover: | 16 numbers starting with 6011 |
AMEX: | 15 numbers starting with 34 or 37 |
三、支付流程图:
四、支付接口
银行卡校验算法,hex上有库luhn,各种银行卡都适用,不限于信用卡。
# mix.exs
defp deps do
[
{:luhn, "~> 0.3.0"}
]
end
辨别银行卡,只需知道卡号前几位。
判断银行卡类型, hex仓库有:
{:credit_card, "~> 1.0"}
国内提供银行卡认证的网站(主要是一些数据服务公司):
- 聚合数据 https://www.juhe.cn/docs/api/id/188
- 易源数据 https://www.showapi.com/api/lookPoint/1072
- 阿凡达数据 http://avatardata.cn/Docs/Api/fd78bda0-4561-4e0f-8e0e-48b2022a5d59
- APIX https://www.apix.cn/services/show/190
信用卡相关支付系统:
来源:http://www.infomerchant.net/creditcardprocessing/credit_card_test_numbers.html