步骤:
首先区分借记卡和信用卡,然后就是校验卡号,最后根据银联Bin确定什么银行,Bin之后就是归属地。
本文所有数据来源于网络,不一定保证正确和完整,这里仅仅作为教学使用。
- package org.luozhuang.bankcard;
- public class checkBankCard {
- /*
- 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,
- 因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。
- 该校验的过程:
- 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
- 2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。
- 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。
- 例如,卡号是:5432123456788881
- 则奇数、偶数位(用红色标出)分布:5432123456788881
- 奇数位和=35
- 偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。
- 最后35+35=70 可以被10整除,认定校验通过。
- 请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。
- 比如,用户输入:356827027232780
- 程序输出:成功
- */
- /**
- * 校验银行卡卡号
- * @param cardId
- * @return
- */
- public static boolean checkBankCard(String cardId) {
- char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));
- if(bit == 'N'){
- return false;
- }
- return cardId.charAt(cardId.length() - 1) == bit;
- }
- /**
- * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位
- * @param nonCheckCodeCardId
- * @return
- */
- public static char getBankCardCheckCode(String nonCheckCodeCardId){
- if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0
- || !nonCheckCodeCardId.matches("\\d+")) {
- //如果传的不是数据返回N
- return 'N';
- }
- char[] chs = nonCheckCodeCardId.trim().toCharArray();
- int luhmSum = 0;
- for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) {
- int k = chs[i] - '0';
- if(j % 2 == 0) {
- k *= 2;
- k = k / 10 + k % 10;
- }
- luhmSum += k;
- }
- return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0');
- }
- }
- package org.luozhuang.bankcard;
- import java.util.Arrays;
- public class BankCardBin {
- // 银行卡是由”发卡行标识代码 + 自定义 + 校验码 “等部分组成的
- // BIN号
- //银联标准卡与以往发行的银行卡最直接的区别就是其卡号前6位数字的不同。
- //银行卡卡号的前6位是用来表示发卡银行或机构的,称为“发卡行识别码”(Bank Identification Number,缩写为“BIN”)。
- //银联标准卡是由国内各家商业银行(含邮储、信用社)共同发行、符合银联业务规范和技术标准、卡正面右下角带有“银联”标识(目前,新发行的银联标准卡一定带有国际化的银联新标识,新发的非银联标准卡使用旧的联网通用银联标识)、
- //卡号前6位为622126至622925之一的银行卡,是中国银行卡产业共有的民族品牌。
- private final static int[] bankBin = { 102033, 103000, 185720, 303781,
- 356827, 356828, 356833, 356835, 356837, 356838, 356839, 356840,
- 356885, 356886, 356887, 356888, 356889, 356890, 370246, 370247,
- 370248, 370249, 400360, 400937, 400938, 400939, 400940, 400941,
- 400942, 402658, 402673, 402791, 403361, 403391, 404117, 404157,
- 404171, 404172, 404173, 404174, 404738, 404739, 405512, 405512,
- 406252, 406254, 406365, 407405, 409665, 409666, 409667, 409668,
- 409669, 409670, 409671, 409672, 410062, 412962, 412963, 415599,
- 421317, 421349, 421393, 421437, 421865, 421869, 421870, 421871,
- 422160, 422161, 424106, 424107, 424108, 424109, 424110, 424111,
- 424902, 425862, 427010, 427018, 427019, 427020, 427028, 427029,
- 427038, 427039, 427062, 427064, 427571, 428911, 431502, 431502,
- 433666, 433670, 433680, 434061, 434062, 435744, 435745, 436718,
- 436728, 436738, 436742, 436745, 436748, 436768, 438088, 438125,
- 438126, 438588, 438589, 438600, 439188, 439225, 439227, 442729,
- 442730, 451289, 451291, 451804, 451804, 451810, 451810, 453242,
- 456351, 456418, 458060, 458060, 458071, 458071, 458123, 458124,
- 468203, 472067, 472068, 479228, 479229, 481699, 486466, 486493,
- 486494, 486497, 487013, 489592, 489734, 489735, 489736, 491020,
- 491020, 491031, 491032, 491040, 493427, 493878, 498451, 504923,
- 510529, 512315, 512316, 512411, 512412, 512425, 512431, 512466,
- 512695, 512732, 514906, 514957, 514958, 517636, 518212, 518364,
- 518378, 518379, 518474, 518475, 518476, 518710, 518718, 519412,
- 519498, 520082, 520108, 520131, 520152, 520169, 520194, 520382,
- 521899, 522153, 523036, 524011, 524047, 524070, 524091, 524094,
- 524864, 524865, 525498, 525745, 525746, 526410, 526855, 527414,
- 528020, 528931, 528948, 530970, 530980, 530980, 530990, 532420,
- 532430, 532450, 532458, 535910, 535910, 535918, 537830, 540297,
- 540838, 541068, 541709, 543159, 544033, 545619, 545623, 545947,
- 547628, 547648, 547766, 547766, 548259, 548844, 552245, 552288,
- 552534, 552587, 552599, 552742, 552794, 552801, 552853, 553131,
- 553242, 556610, 556617, 558360, 558730, 558808, 558809, 558868,
- 558868, 558894, 558895, 558916, 566666, 584016, 601100, 601101,
- 601121, 601122, 601123, 601124, 601125, 601126, 601127, 601128,
- 601131, 601136, 601137, 601138, 601140, 601142, 601143, 601144,
- 601145, 601146, 601147, 601148, 601149, 601174, 601177, 601178,
- 601179, 601186, 601187, 601188, 601189, 601382, 601382, 601428,
- 601428, 601428, 601428, 602907, 602907, 602969, 602969, 603128,
- 603128, 603367, 603367, 603445, 603445, 603506, 603506, 603601,
- 603601, 603601, 603601, 603601, 603601, 603602, 603602, 603694,
- 603694, 603708, 603708, 621021, 621201, 621977, 621977, 622126,
- 622126, 622127, 622127, 622127, 622127, 622128, 622128, 622129,
- 622129, 622131, 622131, 622132, 622132, 622133, 622133, 622134,
- 622134, 622135, 622135, 622136, 622136, 622137, 622137, 622138,
- 622138, 622139, 622139, 622140, 622140, 622141, 622141, 622143,
- 622143, 622146, 622146, 622147, 622147, 622148, 622148, 622149,
- 622149, 622150, 622150, 622151, 622151, 622152, 622152, 622153,
- 622153, 622154, 622154, 622155, 622155, 622156, 622156, 622165,
- 622165, 622166, 622166, 622168, 622168, 622169, 622169, 622178,
- 622178, 622179, 622179, 622184, 622184, 622188, 622188, 622199,
- 622199