【敏感数据识别】银行卡号校验实现(准确率高)

一、常见银行卡号校验实现

银行卡号正则:^([4-6]{1})(\d{15}|\d{18})$ + luhm校验位
缺点:易与编号碰撞

二、解决办法

正则 + luhm校验位 + 卡bin + 银行卡长度

银行卡号由发卡行标识(即卡bin)+发卡行自定位+校验位构成,其中卡BIN号(Bank Identification Number)即发卡银行标识代码的英文缩写,为银行卡号前6位,由中国银联负责向机构分配、确认和管理。

中国银行发卡步骤:
1、向银联申请卡bin
2、银联通过
3、银行发卡

三、卡bin获取难点

银联未公开卡bin数据,卡bin文件一月一更新,仅支持企业身份申请卡bin文件。通过申请后,银联会将卡bin文件发送给企业邮箱。
卡bin文件中包含每一卡bin对应发卡行银行卡号长度、卡片类型(借记卡、储蓄卡、信用卡等)、发卡行编码等信息。
所以,卡bin是只能以企业身份拿到的。如果你所在的公司有做支付的团队,那么在企业内部就已经从银联申请过卡bin文件了,找到自己公司的支付团队申请卡bin就行了。

四、代码实现

注:本文不提供卡bin文件,需自行寻找或向银联申请

public class BankCardUtil {
   
	// bin -> 银行信息
	private static final Map<String, BankCardBinInfo> BIN_TO_INFO_MAP = new HashMap<>();
	// bin -> 银行卡长度
	private static final Map<String, Integer> BIN_TO_LENGTH_MAP = new HashMap<>();

	static {
   
		InputStream inputStream = null;
		try {
   
			String path = "static/卡bin文件.xlsx";
			inputStream = BankCardUtil.class.getClassLoader().getResourceAsStream(path);
			ExcelReader reader = ExcelUtil.getReader(inputStream, "sheet1");
			List<List<Object>> readAll = reader.read(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值