卡bin说明:
有企业做成api对外提供有偿服务了,好主意呀!是个挣钱的路子。http://www.56lim.com/sell/show-10.html
service代码:
在manage项目里。逻辑代码如下:
package com.emaxcard.manage.rpc.service.impl; import org.apache.commons.lang.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.thrift.TException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.emaxcard.common.util.JsonMapperUtil; import com.emaxcard.manage.modules.route.dao.BankCardBinDao; import com.emaxcard.manage.modules.route.entity.BankCardBin; import com.emaxcard.manage.rpc.service.BankCardBinRedisService; import com.emaxcard.redis.JedisClusterUtil; import com.emaxcard.rpc.service.RpcService; import redis.clients.jedis.JedisCluster; @Service @RpcService(name = "BankCardBinRedisServiceImpl", processor = BankCardBinRedisService.Processor.class) public class BankCardBinRedisServiceImpl implements BankCardBinRedisService.Iface { /** * 定义全局日志 */ private static final Logger logger = LogManager.getLogger(); @Autowired private BankCardBinDao bankCardBinDao; // 传入卡号 查出银行信息 @Override public String getCardBin(String cardNo) throws TException { logger.info("获取卡bin,卡号{}",cardNo); if (cardNo == null || cardNo.length() < 13 || cardNo.length() > 19) { return ""; } // 6位Bin号 String cardNoSix = cardNo.substring(0, 6); String binSix = intercept("6", cardNoSix); if (StringUtils.isNotBlank(binSix)) { return binSix; } // 5位Bin号 String cardNoFive = cardNo.substring(0, 5); String binFive = intercept("5", cardNoFive); if (StringUtils.isNotBlank(binFive)) { return binFive; } // 8位Bin号 String cardNoEight = cardNo.substring(0, 8); String binEight = intercept("8", cardNoEight); if (StringUtils.isNotBlank(binEight)) { return binEight; } // 7位的bin号 String cardNoSeven = cardNo.substring(0, 7); String binSeven = intercept("7", cardNoSeven); if (StringUtils.isNotBlank(binSeven)) { return binSeven; } return ""; } // 通过key 和发卡行标识 得到json串银行信息 @Override public String intercept(String bankcardNoteLength, String bankcardNote) throws TException { // 查询Redis JedisCluster jedisCluster = JedisClusterUtil.getJedisCluster(); String cardBinNo = "bankCardBinCatch" + bankcardNoteLength; String json = jedisCluster.hget(cardBinNo, bankcardNote); if (StringUtils.isBlank(json)) { BankCardBin bankCardBin = new BankCardBin(); bankCardBin.setBankcardNote(bankcardNote); bankCardBin.setBankcardNoteLength(bankcardNoteLength); // 查数据库 bankCardBin = bankCardBinDao.selectBnakCardBin(bankCardBin); if (null != bankCardBin) { String bankCardBinJson = new JsonMapperUtil().toJson(bankCardBin); jedisCluster.hset(cardBinNo, bankCardBin.getBankcardNote(), bankCardBinJson); logger.info("获取卡bin数据库返回{},发卡行标示{},bin的位数{}",bankCardBinJson,bankcardNote,bankcardNoteLength); return bankCardBinJson; } } else { logger.info("获取卡bin redis返回{},发卡行标示{},bin的位数{}",json,bankcardNote,bankcardNoteLength); return json; } return ""; } }
数据表DDL:
CREATE TABLE `bank_card_bin` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一标识', `bank_code` char(12) DEFAULT NULL COMMENT '发卡行代码', `bank_name` varchar(200) NOT NULL COMMENT '发卡行名称', `bankcard_note` bigint(21) DEFAULT NULL COMMENT '发卡行标识', `bankcard_note_length` tinyint(2) DEFAULT NULL COMMENT '发卡行标识的长度', `bankcard_length` tinyint(4) DEFAULT NULL COMMENT '卡号长度', `card_name` varchar(50) DEFAULT NULL COMMENT '卡名称', `card_type` char(6) NOT NULL COMMENT '卡类型(枚举类BankcardType (("UNKNOW","未知"),("SAVING","储蓄卡"),("CREDIT","信用卡")))', `status` char(6) NOT NULL COMMENT '状态(枚举类CommonStatus ENABLE(启用) DISABL(禁用))', `create_time` datetime NOT NULL COMMENT '创建时间', `create_user` int(11) NOT NULL COMMENT '创建人', `update_time` datetime DEFAULT NULL COMMENT '修改时间', `update_user` int(11) DEFAULT NULL COMMENT '修改人', PRIMARY KEY (`id`), KEY `idx_bc_bin_bnote` (`bankcard_note`) USING BTREE, KEY `idx_bc_bin_cname` (`card_name`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=94488 DEFAULT CHARSET=utf8mb4 COMMENT='银行卡bin管理'
数据:
2.0库记录数:5404条。 溢+聚合系统(t_info_bankbin)记录数:13449条


