銀行卡-卡bin校驗邏輯


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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM