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

2023-12-26 04:18

本文主要是介绍根据输入的银行卡号显示开户银行类型,并将银行卡号四位分隔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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;@Overrideprotected 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() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {beforeTextLength = s.length();}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic 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"><RelativeLayoutandroid:id="@+id/rl_name"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid: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"/><EditTextandroid: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><TextViewandroid: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;}//获得BankNameprivate 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

这篇关于根据输入的银行卡号显示开户银行类型,并将银行卡号四位分隔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/538067

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Python如何查看数据的类型

《Python如何查看数据的类型》:本文主要介绍Python如何查看数据的类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python查看数据的类型1. 使用 type()2. 使用 isinstance()3. 检查对象的 __class__ 属性4.

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Python如何在Word中生成多种不同类型的图表

《Python如何在Word中生成多种不同类型的图表》Word文档中插入图表不仅能直观呈现数据,还能提升文档的可读性和专业性,本文将介绍如何使用Python在Word文档中创建和自定义各种图表,需要的... 目录在Word中创建柱形图在Word中创建条形图在Word中创建折线图在Word中创建饼图在Word

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要