银行卡-卡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