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 getBinNum(Context context) { String binNum = openBinNum(context); String[] binArr = binNum.split(","); List 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 getBinName(Context context) { String binNum = openBinNum(context); String[] binArr = binNum.split(","); List 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 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; }

【android根据银行卡卡号前6位获得归属银行】全球银行银行卡的bin号下载地址:http://download.csdn.net/detail/u013334392/9628242



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


    推荐阅读