根据输入的银行卡号显示开户银行类型,并将银行卡号四位分隔

工作中遇到将绑定银行卡的需求,而且需要根据银行卡号显示开户行类型,并将银行卡号四位分隔,参考了下网上的栗子,并进行了融合优化,写出适合自己的代码

不多说,直接上代码,注释写的很清晰。

1、Activity逻辑实现

package net.edaibu.banknametest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    int beforeTextLength = 0;
    int onTextLength = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        final EditText tvBankNamePrinted = (EditText) findViewById(R.id.tv_name_print);
        final TextView tvDescribeBankName = (TextView) findViewById(R.id.tv_describe_bank_name);

        tvBankNamePrinted.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                beforeTextLength = s.length();
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                Log.e("tag", "输入的数字:" + s);
                String bankNumber = tvBankNamePrinted.getText().toString().trim();
                onTextLength = bankNumber.length();
                if (onTextLength > beforeTextLength) {
                    if (bankNumber.length() == 5 || bankNumber.length() == 10 || bankNumber.length() == 15 || bankNumber.length() == 20) {
                        tvBankNamePrinted.setText(new StringBuffer(bankNumber).insert(
                                bankNumber.length() - 1, " ").toString());
                        tvBankNamePrinted.setSelection(tvBankNamePrinted.getText()
                                .length());
                    }
                } else {
                    if (bankNumber.startsWith(" ")) {
                        tvBankNamePrinted.setText(new StringBuffer(bankNumber).delete(
                                onTextLength - 1, onTextLength).toString());
                        tvBankNamePrinted.setSelection(tvBankNamePrinted.getText()
                                .length());
                    }
                }
                //根据银行卡号前6位查询银行信息
                if (bankNumber.length() >= 7) {
                    //移除空格
                    String noSpaceNumber = removeAllSpace(bankNumber);
                    //截取前6位
                    String divideStr = noSpaceNumber.substring(0, 6);
                    //通过银行卡号前6位查询开户行信息
                    String bankName = GetBankNameUtil.getNameOfBank(MainActivity.this, Long.parseLong(divideStr));
                    tvDescribeBankName.setText(bankName);
                } else {
                    tvDescribeBankName.setText("");
                }
            }
        });
    }

    /**
     * 移除空格
     * @param str
     * @return
     */
    public String removeAllSpace(String str) {
        String tmpStr = str.replace(" ", "");
        return tmpStr;
    }

}

2、layout布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <RelativeLayout
        android:id="@+id/rl_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/tv_name"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:text="银行卡号"
            android:layout_margin="8dp"
            android:gravity="center_vertical"
            android:textSize="16sp"
            android:textColor="#000000"/>
         <EditText
             android:id="@+id/tv_name_print"
             android:layout_width="match_parent"
             android:layout_height="40dp"
             android:layout_margin="8dp"
             android:layout_toRightOf="@+id/tv_name"
             android:background="@drawable/border_shape"
             android:hint="请输入银行卡号"
             />
    </RelativeLayout>
    <TextView
        android:id="@+id/tv_describe_bank_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textColor="#ff00ff"
        android:layout_below="@+id/rl_name"
        android:text=""/>


</RelativeLayout>

3、根据银行卡号查询银行信息的工具类

package net.edaibu.banknametest;

import android.content.Context;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @author geqipeng
 * @date 2017/8/10
 */

public class GetBankNameUtil {

    private static String bankName;
    private static String binName;

    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) {
                if (binArr[i].contains("-")) {
                    //截取首尾部分
                    bankName = binArr[i].substring(0, binArr[i].indexOf("-")) + binArr[i].substring(binArr[i].lastIndexOf("-"));
                } else {
                    bankName = binArr[i];
                }
                list.add(bankName);
            }

        }
        return list;
    }

    //通过输入的卡号获得银行卡信息
    public static String getNameOfBank(Context context, long binNum) {
        int index = 0;
        index = binarySearch(getBinNum(context), binNum);
        //银行名
        if (index!=-1){
            binName = getBinName(context).get(index);
            return binName + "\n";
        }
        return "未查询到相关银行信息\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;
    }
}

4、效果图




感谢:

 http://blog.csdn.net/u011780646/article/details/42557683

http://blog.csdn.net/u013334392/article/details/52511743


银行卡号查询文档 binNumber.txt下载链接:https://pan.baidu.com/s/1dFkvtg1   密码:kuug

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,我可以给您提供一个简单的银行卡管理系统的Java代码框架,您可以在此基础上进行修改和完善。 ```java import java.util.ArrayList; import java.util.Scanner; public class BankCardManagementSystem { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); ArrayList<Card> cardList = new ArrayList<>(); int choice = 0; while (choice != 4) { System.out.println("======= 银行卡管理系统 ======="); System.out.println("1. 添加银行卡"); System.out.println("2. 查询银行卡"); System.out.println("3. 删除银行卡"); System.out.println("4. 退出系统"); System.out.println("============================="); System.out.print("请选择操作:"); choice = scanner.nextInt(); switch (choice) { case 1: addCard(scanner, cardList); break; case 2: queryCard(scanner, cardList); break; case 3: deleteCard(scanner, cardList); break; case 4: System.out.println("谢谢使用!"); break; default: System.out.println("输入有误,请重新输入!"); break; } } } private static void addCard(Scanner scanner, ArrayList<Card> cardList) { System.out.print("请输入银行卡:"); String number = scanner.next(); System.out.print("请输入持卡人姓名:"); String name = scanner.next(); System.out.print("请输入开户行名称:"); String bank = scanner.next(); System.out.print("请输入密码:"); String password = scanner.next(); Card card = new Card(number, name, bank, password); cardList.add(card); System.out.println("添加成功!"); } private static void queryCard(Scanner scanner, ArrayList<Card> cardList) { System.out.print("请输入要查询的银行卡:"); String number = scanner.next(); for (Card card : cardList) { if (card.getNumber().equals(number)) { System.out.println("银行卡信息如下:"); System.out.println("银行卡:" + card.getNumber()); System.out.println("持卡人姓名:" + card.getName()); System.out.println("开户行名称:" + card.getBank()); return; } } System.out.println("查询失败,该银行卡不存在!"); } private static void deleteCard(Scanner scanner, ArrayList<Card> cardList) { System.out.print("请输入要删除的银行卡:"); String number = scanner.next(); for (Card card : cardList) { if (card.getNumber().equals(number)) { cardList.remove(card); System.out.println("删除成功!"); return; } } System.out.println("删除失败,该银行卡不存在!"); } } class Card { private String number; private String name; private String bank; private String password; public Card(String number, String name, String bank, String password) { this.number = number; this.name = name; this.bank = bank; this.password = password; } public String getNumber() { return number; } public String getName() { return name; } public String getBank() { return bank; } public String getPassword() { return password; } } ``` 在这个程序中,我们使用了一个 `Card` 类来表示银行卡,其中包含银行卡、持卡人姓名、开户行名称和密码等属性。我们还使用了一个 `ArrayList` 来存储所有的银行卡。 在主函数中,我们使用一个无限循环来实现多次操作,每次循环中输出菜单供用户选择,根据用户的选择执行相应的操作。其中,添加银行卡、查询银行卡和删除银行卡分别对应了 `addCard()`、`queryCard()` 和 `deleteCard()` 函数。 希望这份代码能够对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值