卡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條