手机银行余额生成器,农业工商建设邮政招商中国,jar+Python双框架

676 阅读2分钟

下载地址:www.wenshushu.vip/download.ph…

在金融科技领域,模拟银行账户数据对于开发和测试场景非常有用。本文将介绍一个支持农业银行、工商银行、建设银行、邮政银行、招商银行和中国银行的余额生成器,采用Java(JAR)和Python双框架实现。

系统架构设计

该余额生成器具有以下特点:

  • 支持六大主流银行账户模拟
  • 生成符合各银行规范的虚拟账号
  • 产生合理的余额变动记录
  • 提供Java(JAR)和Python两种调用方式

public class BankBalanceGenerator {
    
    public enum Bank {
        AGRICULTURAL("农业银行", "6228"),
        INDUSTRIAL("工商银行", "6222"),
        CONSTRUCTION("建设银行", "6227"),
        POSTAL("邮政银行", "6221"),
        MERCHANTS("招商银行", "6225"),
        CHINA("中国银行", "4563");
        
        private final String name;
        private final String prefix;
        
        Bank(String name, String prefix) {
            this.name = name;
            this.prefix = prefix;
        }
        
        public String getName() {
            return name;
        }
        
        public String getPrefix() {
            return prefix;
        }
    }
    
    private static final Random random = new Random();
    
    public static String generateAccountNumber(Bank bank) {
        StringBuilder sb = new StringBuilder(bank.getPrefix());
        for (int i = 0; i < 12; i++) {
            sb.append(random.nextInt(10));
        }
        return sb.toString();
    }
    
    public static double generateBalance() {
        // 生成0-100万之间的随机余额,保留2位小数
        return Math.round(random.nextDouble() * 1000000 * 100) / 100.0;
    }
    
    public static String generateBankCard(Bank bank) {
        return generateAccountNumber(bank);
    }
    
    public static void main(String[] args) {
        // 示例用法
        Bank bank = Bank.AGRICULTURAL;
        String account = generateAccountNumber(bank);
        double balance = generateBalance();
        
        System.out.println("银行: " + bank.getName());
        System.out.println("账号: " + account);
        System.out.println("余额: " + balance + "元");
    }
}

from enum import Enum

class Bank(Enum):
    AGRICULTURAL = ("农业银行", "6228")
    INDUSTRIAL = ("工商银行", "6222")
    CONSTRUCTION = ("建设银行", "6227")
    POSTAL = ("邮政银行", "6221")
    MERCHANTS = ("招商银行", "6225")
    CHINA = ("中国银行", "4563")
    
    def __init__(self, name, prefix):
        self._name = name
        self._prefix = prefix
    
    @property
    def name(self):
        return self._name
    
    @property
    def prefix(self):
        return self._prefix

def generate_account_number(bank):
    """生成符合银行规范的账号"""
    account = bank.prefix
    account += ''.join([str(random.randint(0, 9)) for _ in range(12)])
    return account

def generate_balance():
    """生成随机余额"""
    return round(random.uniform(0, 1000000), 2)

def generate_transaction_history(account, days=30):
    """生成交易记录"""
    history = []
    for day in range(days, 0, -1):
        transactions = random.randint(0, 5)
        for _ in range(transactions):
            amount = round(random.uniform(-5000, 5000), 2)
            history.append({
                'date': f"{day}天前",
                'amount': amount,
                'type': '支出' if amount < 0 else '收入',
                'balance': 0  # 将在后续计算
            })
    
    # 计算每次交易后的余额
    current_balance = generate_balance()
    for record in reversed(history):
        current_balance -= record['amount']
        record['balance'] = round(current_balance, 2)
    
    return history

def get_bank_balance(bank_type):
    """获取银行余额信息"""
    bank = Bank[bank_type.upper()]
    account = generate_account_number(bank)
    balance = generate_balance()
    history = generate_transaction_history(account)
    
    return {
        'bank': bank.name,
        'account': account,
        'balance': balance,
        'currency': 'CNY',
        'history': history[-10:]  # 返回最近10条记录
    }

if __name__ == "__main__":
    # 示例用法
    from pprint import pprint
    result = get_bank_balance("agricultural")
    pprint(result)

import java.io.InputStreamReader;

public class PythonCaller {
    public static String callPythonScript(String bankType) {
        try {
            String pythonScriptPath = "path/to/bank_generator.py";
            ProcessBuilder pb = new ProcessBuilder("python", pythonScriptPath, bankType);
            Process p = pb.start();
            
            BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line;
            StringBuilder result = new StringBuilder();
            
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
            
            return result.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}