android根据银行卡卡号前6位获得归属银行

根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号。

我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表。通过二分查找的方法,找到bin号在有序表的位置,然后读出银行卡的信息。

我将有序数据封装在了txt文件中,里面是全球银行银行卡的bin号,大家可以直接放入assets目录下即可。数据超级全面,找了老久,分享给大家使用,下面就贴上java实现类:

 

import android.content.Context;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import core.base.log.L;

/**
 * Created by AnmiLin on 2016/9/10.
 * 根据银行卡号判断是哪个银行的卡,依据是银行卡号的前6位数,称之为bin号。
 * 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表。通过二分查找的方法,找到bin号在有序表的位置,然后读出银行卡的信息。
 */
public class AssetsBankInfo {

  //该方法用于打开assets中的binNum文档资源,获得里面的binNum数据
 private static String openBinNum(Context context) {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        String str = null;
        try {
            InputStream is = context.getResources().getAssets().open("binNum.txt");
            byte[] bytes = new byte[1024];
            int length = 0;
            while ((length = is.read(bytes)) != -1) {
                outputStream.write(bytes, 0, length);
            }
            is.close();
            outputStream.close();
            str = outputStream.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }

  //获得Bank card的前缀
    private static List<Long> getBinNum(Context context) {
        String binNum = openBinNum(context);
        String[] binArr = binNum.split(",");
        List<Long> lon = new ArrayList<>();
        for (int i = 0; i < binArr.length; i++) {
            if (i % 2 == 0)
                lon.add(Long.parseLong(binArr[i]));

        }
        return lon;
    }
//获得BankName 
private static List<String> getBinName(Context context) {
    String binNum = openBinNum(context);
    String[] binArr = binNum.split(",");
    List<String> list = new ArrayList<>();
    for (int i = 0; i < binArr.length; i++) {
        if (i % 2 != 0) list.add(binArr[i]);
    }
    return list;
}

//通过输入的卡号获得银行卡信息
public static String getNameOfBank(Context context, long binNum) {
    Log.e("sangfei.code", "bankBin: " + binNum);
    int index = 0;
    index = binarySearch(getBinNum(context), binNum);
    if (index == -1) {
        return "磁条卡卡号:\n";
    }
    return getBinName(context).get(index) + ":\n";
}
   //数量有上千条,利用二分查找算法来进行快速查找法
public static int binarySearch(List<Long> srcArray, long des) {

    int low = 0;
    int high = srcArray.size() - 1;
    while (low <= high) {
        int middle = (low + high) / 2;
        if (des == srcArray.get(middle)) {
            return middle;
        } else if (des < srcArray.get(middle)) {
            high = middle - 1;
        } else {
            low = middle + 1;
        }
    }
    return -1;
}

全球银行银行卡的bin号下载地址:http://download.csdn.net/detail/u013334392/9628242

 

 

 

使用例子:

//621462 广发银行 cgb 理财通 借记卡
String nameOfBank = AssetsBankInfo.getNameOfBank(mContext, 621462);//获取银行卡的信息
L.e("nameOfBank=" + nameOfBank);

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值