银行卡归属地查询

业务知识: 本文所有业务知识我已经在《银行卡国内转账、汇款一文通》详细介绍

步骤:

首先区分借记卡和信用卡,然后就是校验卡号,最后根据银联Bin确定什么银行,Bin之后就是归属地。

  本文所有数据来源于网络,不一定保证正确和完整,这里仅仅作为教学使用。

 

[java] view plain copy
  1. package org.luozhuang.bankcard;  
  2.   
  3. public class checkBankCard {  
  4.       
  5.        /* 
  6.     当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心, 
  7.     因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 
  8.     该校验的过程: 
  9.     1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 
  10.     2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。 
  11.     3、将奇数位总和加上偶数位总和,结果应该可以被10整除。 
  12.     例如,卡号是:5432123456788881 
  13.     则奇数、偶数位(用红色标出)分布:5432123456788881 
  14.     奇数位和=35 
  15.     偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和=35。 
  16.     最后35+35=70 可以被10整除,认定校验通过。 
  17.     请编写一个程序,从键盘输入卡号,然后判断是否校验通过。通过显示:“成功”,否则显示“失败”。 
  18.     比如,用户输入:356827027232780 
  19.     程序输出:成功 
  20.     */   
  21.       
  22.     /** 
  23.     * 校验银行卡卡号 
  24.     * @param cardId 
  25.     * @return 
  26.     */  
  27.    public static boolean checkBankCard(String cardId) {  
  28.             char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1));  
  29.             if(bit == 'N'){  
  30.                 return false;  
  31.             }  
  32.             return cardId.charAt(cardId.length() - 1) == bit;  
  33.    }  
  34.     
  35.    /** 
  36.     * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 
  37.     * @param nonCheckCodeCardId 
  38.     * @return 
  39.     */  
  40.    public static char getBankCardCheckCode(String nonCheckCodeCardId){  
  41.        if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0  
  42.                || !nonCheckCodeCardId.matches("\\d+")) {  
  43.            //如果传的不是数据返回N  
  44.            return 'N';  
  45.        }  
  46.        char[] chs = nonCheckCodeCardId.trim().toCharArray();  
  47.        int luhmSum = 0;  
  48.        for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) {  
  49.            int k = chs[i] - '0';  
  50.            if(j % 2 == 0) {  
  51.                k *= 2;  
  52.                k = k / 10 + k % 10;  
  53.            }  
  54.            luhmSum += k;             
  55.        }  
  56.        return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0');  
  57.    }  
  58.   
  59.   
  60. }  


  

[java] view plain copy
  1. package org.luozhuang.bankcard;  
  2.   
  3. import java.util.Arrays;  
  4.   
  5. public class BankCardBin {  
  6.     // 银行卡是由”发卡行标识代码 + 自定义 + 校验码 “等部分组成的  
  7.     // BIN号  
  8.     //银联标准卡与以往发行的银行卡最直接的区别就是其卡号前6位数字的不同。  
  9.     //银行卡卡号的前6位是用来表示发卡银行或机构的,称为“发卡行识别码”(Bank Identification Number,缩写为“BIN”)。  
  10.     //银联标准卡是由国内各家商业银行(含邮储、信用社)共同发行、符合银联业务规范和技术标准、卡正面右下角带有“银联”标识(目前,新发行的银联标准卡一定带有国际化的银联新标识,新发的非银联标准卡使用旧的联网通用银联标识)、  
  11.     //卡号前6位为622126至622925之一的银行卡,是中国银行卡产业共有的民族品牌。  
  12.     private final static int[] bankBin = { 102033103000185720303781,  
  13.             356827356828356833356835356837356838356839356840,  
  14.             356885356886356887356888356889356890370246370247,  
  15.             370248370249400360400937400938400939400940400941,  
  16.             400942402658402673402791403361403391404117404157,  
  17.             404171404172404173404174404738404739405512405512,  
  18.             406252406254406365407405409665409666409667409668,  
  19.             409669409670409671409672410062412962412963415599,  
  20.             421317421349421393421437421865421869421870421871,  
  21.             422160422161424106424107424108424109424110424111,  
  22.             424902425862427010427018427019427020427028427029,  
  23.             427038427039427062427064427571428911431502431502,  
  24.             433666433670433680434061434062435744435745436718,  
  25.             436728436738436742436745436748436768438088438125,  
  26.             438126438588438589438600439188439225439227442729,  
  27.             442730451289451291451804451804451810451810453242,  
  28.             456351456418458060458060458071458071458123458124,  
  29.             468203472067472068479228479229481699486466486493,  
  30.             486494486497487013489592489734489735489736491020,  
  31.             491020491031491032491040493427493878498451504923,  
  32.             510529512315512316512411512412512425512431512466,  
  33.             512695512732514906514957514958517636518212518364,  
  34.             518378518379518474518475518476518710518718519412,  
  35.             519498520082520108520131520152520169520194520382,  
  36.             521899522153523036524011524047524070524091524094,  
  37.             524864524865525498525745525746526410526855527414,  
  38.             528020528931528948530970530980530980530990532420,  
  39.             532430532450532458535910535910535918537830540297,  
  40.             540838541068541709543159544033545619545623545947,  
  41.             547628547648547766547766548259548844552245552288,  
  42.             552534552587552599552742552794552801552853553131,  
  43.             553242556610556617558360558730558808558809558868,  
  44.             558868558894558895558916566666584016601100601101,  
  45.             601121601122601123601124601125601126601127601128,  
  46.             601131601136601137601138601140601142601143601144,  
  47.             601145601146601147601148601149601174601177601178,  
  48.             601179601186601187601188601189601382601382601428,  
  49.             601428601428601428602907602907602969602969603128,  
  50.             603128603367603367603445603445603506603506603601,  
  51.             603601603601603601603601603601603602603602603694,  
  52.             603694603708603708621021621201621977621977622126,  
  53.             622126622127622127622127622127622128622128622129,  
  54.             622129622131622131622132622132622133622133622134,  
  55.             622134622135622135622136622136622137622137622138,  
  56.             622138622139622139622140622140622141622141622143,  
  57.             622143622146622146622147622147622148622148622149,  
  58.             622149622150622150622151622151622152622152622153,  
  59.             622153622154622154622155622155622156622156622165,  
  60.             622165622166622166622168622168622169622169622178,  
  61.             622178622179622179622184622184622188622188622199,  
  62.             622199622200622200622202622202622203622203622208,  
  63.             622208622210622210622211622211622212622212622213,  
  64.             622213622214622214622215622215622220622220622225,  
  65.             622225622230622230622235622235622240622240622245,  
  66.             622245622250622250622251622251622252622252622253,  
  67.             622253622254622254622258622258622259622259622260,  
  68.             6222606222616222616222806222806222
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值