尧图精选

Faker::Finance 金融数据生成完全指南:信用卡、VAT 税号、股票代码与交易所

🕒 发布时间:2026/9/15 10:09:59 📁 来源:尧图网络
Faker::Finance 金融数据生成完全指南信用卡、VAT 税号、股票代码与交易所【免费下载链接】fakerA library for generating fake data such as names, addresses, and phone numbers.项目地址: https://gitcode.com/GitHub_Trending/fake/fakerFaker 的Faker::Finance模块面向金融业务测试场景可一键生成符合真实格式规则的假数据带 Luhn 校验位的信用卡号、覆盖 30 国家/地区的 VAT 增值税号、NASDAQ/NYSE 股票代码以及全球主流交易所名称。本文基于当前仓库中 doc/default/finance.md 的官方文档结合 lib/faker/default/finance.rb 源码实现与 lib/locales/en/finance.yml 数据模板逐方法讲解用法、参数约束与底层生成原理帮助你完成支付、税务、行情等金融模块的测试数据填充。一、快速上手四个核心方法一览Faker::Finance共提供四个公开生成方法另有condominium_fiscal_code与vat_number_keys两个辅助接口见下文核心用法如下# 1. 随机信用卡号自动选择卡组织 Faker::Finance.credit_card # 3018-348979-1853 # 指定卡组织可传多个从中随机选一个 Faker::Finance.credit_card(:mastercard) # 6771-8921-2291-6236 Faker::Finance.credit_card(:mastercard, :visa) # 4448-8934-1277-7195 # 2. 随机 VAT 增值税号关键字参数指定国家代码默认巴西 BR Faker::Finance.vat_number # BR38.395.329/2471-83 Faker::Finance.vat_number(country: DE) # DE593306671 Faker::Finance.vat_number(country: ZA) # ZA79494416181 # 3. 随机股票代码ticker支持按交易所过滤 Faker::Finance.ticker # AMZN Faker::Finance.ticker(NASDAQ) # GOOG # 4. 随机交易所名称 Faker::Finance.stock_market # NASDAQ这些方法的实现全部位于 lib/faker/default/finance.rb可直接在require faker后使用。注意ticker与stock_market在源码中以faker.version next标注属于较新加入的能力使用前请确认你所依赖的 gem 版本已包含它们。二、credit_card带 Luhn 校验位的真实感卡号2.1 支持的卡组织源码第 5-7 行定义了完整的卡组织常量CREDIT_CARD_TYPES %i[visa mastercard discover american_express diners_club jcb switch solo dankort maestro forbrugsforeningen laser].freeze共11 种卡组织visa、mastercard、discover、american_express、diners_club、jcb、switch、solo、dankort、maestro、forbrugsforeningen、laser。不传参数时credit_card会从全部类型中随机选取传入一个或多个类型参数时则只从指定类型中随机抽取。2.2 Luhn 校验位的底层原理这是credit_card最有技术含量的部分。从源码第 24-41 行可以看到完整实现流程def credit_card(*types) types CREDIT_CARD_TYPES if types.empty? type sample(types) template numerify(fetch(finance.credit_card.#{type})) # calculate the luhn checksum digit multiplier 1 luhn_sum template.gsub(/[^0-9]/, ).chars.reverse.map(:to_i).inject(0) do |sum, digit| multiplier (multiplier 2 ? 1 : 2) sum (digit * multiplier).to_s.chars.map(:to_i).inject(0) { |digit_sum, cur| digit_sum cur } end luhn_digit (10 - (luhn_sum % 10)) % 10 template.gsub(L, luhn_digit.to_s) end生成步骤可拆解为四步模板替换先从 lib/locales/en/finance.yml 按卡组织抓取卡号模板形如/4###########L/再调用numerify定义于 lib/faker.rb将#替换为随机数字——其中首位#用 1-9 保证不以 0 开头其余#用 0-9。Luhn 计算提取模板中的纯数字部分从右往左按×2、×1交替相乘乘积为两位数时拆位相加最后累加得到luhn_sum。校验位推导luhn_digit (10 - (luhn_sum % 10)) % 10保证整串卡号数字之和为 10 的倍数。回填L模板末尾的占位符L即校验位位置替换为计算出的数字。每个卡组织的模板都严格模拟了真实的发卡行识别码IIN前缀。以 lib/locales/en/finance.yml 为例credit_card: visa: - /4###########L/ - /4###-####-####-###L/ mastercard: - /5[1-5]##-####-####-###L/ - /6771-89##-####-###L/ american_express: - /34##-######-####L/ - /37##-######-####L/可以看到Visa 卡以4开头Mastercard 以5[1-5]或6771-89开头对应真实 Mastercard 2 系列号段American Express 以34/37开头。模板中的连字符会被保留生成结果因此带有真实卡号的分组显示格式如4448-8934-1277-7195。由于校验位是按 Luhn 算法动态计算的这些卡号可以轻松通过支付表单的格式与校验位验证非常适合用于测试收银、绑卡、风控等流程。2.3 与测试用例的印证测试文件 test/faker/default/test_faker_finance.rb 虽然未直接断言 Luhn但验证了vat_number、ticker、stock_market的返回值均为非空字符串assert_match(/\w/, ...)并重点覆盖了参数合法性边界见下节。三、vat_number覆盖 30 国家/地区的增值税号3.1 用法与参数Faker::Finance.vat_number # BR38.395.329/2471-83默认国家 BR Faker::Finance.vat_number(country: DE) # DE593306671 Faker::Finance.vat_number(country: ZA) # ZA79494416181源码实现第 55-59 行非常简洁def vat_number(country: BR) numerify(fetch(finance.vat_number.#{country})) rescue I18n::MissingTranslationData raise ArgumentError, Could not find vat number for #{country} end要点说明默认值country关键字参数默认BR巴西使用两字母大写国家代码ISO 3166-1 alpha-2。错误处理若传入不存在的国家代码fetch会抛出I18n::MissingTranslationData源码将其转换为ArgumentError并附带清晰报错信息。测试test_vat_number_with_invalid_paramstest/faker/default/test_faker_finance.rb用随机单词验证了这一行为。3.2 完整国家模板列表lib/locales/en/finance.yml 中vat_number节点定义了 30 国家/地区的模板#同样由numerify替换为随机数字vat_number: AT: ATU######## AR: AR########### AU: AU########### BR: BR##.###.###/####-## BY: УНП ######### BE: BE0######### BG: - BG######### - BG########## CH: CH###### CL: CL########-# CZ: - CZ######## - CZ######### - CZ########## DK: DK## ## ## ## EC: EC############# EE: EE######### FI: FI######## DE: DE######### GB: - GB### #### ## - GB### #### ## ### - GBGD### - GBHA### - GB888 8### ## GR: EL######### HR: HR### ### ### ## NO: NO######### HU: HU######## IT: IT########### LT: - LT######### - LT############ LU: LU######## LV: LV########### MT: MT######## MX: MX#### ###### ### PH: PH### ### ### ### PL: PL########## PT: PT######### RO: - RO## - RO### - RO#### - RO##### - RO###### - RO####### - RO######## - RO######### - RO########## RU: - RU########## - RU############ SE: SE##########01 SI: SI######## SK: SK########## SM: SM##### UA: UA########## ZA: - ZA########## - ZA###########模板真实还原了各国 VAT 的格式差异巴西采用BR##.###.###/####-##这种带斜杠与连字符的 CNPJ 风格格式英国区分了标准格式GB### #### ##、政府机构号GBGD###/GBHA###等挪威在 YAML 中写作NO因NO是 YAML 布尔值必须加引号瑞典以SE##########01结尾。测试test_south_african_vat_numbertest/faker/default/test_faker_finance.rb专门断言南非格式匹配\AZA\d{10,11}\z即 ZA 后跟 10-11 位数字。3.3 枚举可用国家vat_number_keys源码第 61-63 行还提供了一个辅助方法可列出当前 locale 下所有支持的国家代码def vat_number_keys translate(faker.finance.vat_number).keys end测试test_vat_number_with_valid_paramstest/faker/default/test_faker_finance.rb正是遍历这些 keys 逐一断言其返回值格式合法。你可以用它做参数化测试例如Faker::Finance.vat_number_keys # [:AT, :AR, :AU, :BR, :BY, :BE, :BG, :CH, :CL, :CZ, :DK, ...] Faker::Finance.vat_number_keys.map { |c| Faker::Finance.vat_number(country: c) }四、tickerNASDAQ / NYSE 股票代码4.1 用法Faker::Finance.ticker # AMZN不传参时从 NASDAQ/NYSE 随机选一个市场 Faker::Finance.ticker(NASDAQ) # GOOG源码第 76-82 行的实现逻辑MARKET_LIST %i[nyse nasdaq].freeze def ticker(*markets) markets MARKET_LIST if markets.empty? market sample(markets) fetch(finance.ticker.#{market}) rescue I18n::MissingTranslationData raise ArgumentError, Could not find market named #{market} end支持的市场常量MARKET_LIST仅包含:nyse与:nasdaq两个市场即官方文档标注的 Supported: NASDAQ, NYSE。市场参数大小写不敏感——sample选中后统一以小写形式拼接 I18n key如finance.ticker.nasdaq。多市场混用与credit_card一样支持变参例如Faker::Finance.ticker(NYSE, NASDAQ)会先随机选市场、再从该市场的代码池中取一个。错误处理传入不支持的交易所会抛出ArgumentError测试test_ticker_with_invalid_paramstest/faker/default/test_faker_finance.rb验证了这一点。4.2 数据来源ticker 池同样定义在 lib/locales/en/finance.yml 中每市场 25 个真实公司代码NASDAQMSFT、AAPL、AMZN、GOOG、FB、INTC、CSCO、CMCSA、PEP、ADBE、NVDA、NFLX、PYPL、COST、AMGN、AVGO、TXN、CHTR、SBUX、QCOM、GILD、MDLZ、FISV、BKNG、INTUNYSEXOM、WFC、JNJ、GE、NVX、WMT、JPM、PG、TM、PFE、CVX、BABA、VZ、BUD、ORCL、DIS、KO、HSBC、T、BAC、C、MRK、V、BRK.B、MA测试test_ticker_with_valid_paramstest/faker/default/test_faker_finance.rb通过Faker::Base.fetch_all(finance.ticker.nyse)取出全部 NYSE 代码并断言返回值包含其中确保生成结果不越界。五、stock_market全球交易所名称Faker::Finance.stock_market # NASDAQ这是最简单的接口源码第 93-95 行直接抓取翻译数据并随机返回一项def stock_market fetch(finance.stock_market) endfinance.stock_market在 lib/locales/en/finance.yml 中共定义了 20 个全球主要交易所/指数代码除纽约NYSE、NASDAQ外还包括SSE上交所、HKEX港交所、JPX日本交易所、SZSE深交所、LSE伦敦、 TSX多伦多、NSE-INDIA印度国家证券交易所、FSX法兰克福、TADAWUL沙特、 OMXC-COPENHAGEN哥本哈根、KRX韩国、BSE-BOMBAY孟买、SIX瑞士、 EURONEXT-PARIS巴黎、TWSE台湾、ASX澳洲、JSE约翰内斯堡、BOVESPA巴西值得注意的差异ticker目前仅支持 NASDAQ 与 NYSE 两个市场而stock_market覆盖全球 20 个交易所——如果你想为港股或 A 股场景生成代码目前只能使用stock_market输出交易所名称ticker 数据仍需等待后续版本扩充。六、补充condominium_fiscal_code 与内部机制6.1 condominium_fiscal_code源码第 107-109 行还提供了意大利公寓condominium财政代码生成器def condominium_fiscal_code(country: IT) numerify(fetch(finance.condominium_fiscal_code.#{country})) end当前仅支持IT模板为###########11 位纯数字见 lib/locales/en/finance.yml 中condominium_fiscal_code节点生成结果形如01234567890。可用于意大利房产/税务相关表单测试。6.2 底层机制fetch 与 numerify理解Faker::Finance的一切生成行为都离不开 lib/faker.rb 中的两个基类方法fetch(key)lib/faker.rb从 I18n 翻译树中按faker.#{key}取数据用sample随机挑选一项若该项以/开头和结尾如卡号模板/4###########L/会调用regexify做正则化展开仅支持字符类、范围等简单语法不支持.*、?等复杂模式。numerify(number_string)lib/faker.rb把模板中的#替换成随机数字。默认模式下第一个#从 1-9 取值保证数字不以 0 开头其余#从 0-9 取值。samplelib/faker.rb所有随机挑选最终都通过Faker::Config.random完成这意味着 Finance 的生成结果同样支持随机种子控制——在测试中设置Faker::Config.random Random.new(seed)或Faker::Config.seed即可复现同一批卡号、税号与代码。七、实战金融测试数据组装示例综合以上方法可以在订单、支付、税务相关测试中一次性组装完整金融上下文# 构造一笔测试订单的金融信息 { card: { type: mastercard, number: Faker::Finance.credit_card(:mastercard), expires: #{Faker::Number.between(from: 1, to: 12).to_s.rjust(2, 0)}/#{Faker::Number.between(from: 25, to: 30)} }, vat: Faker::Finance.vat_number(country: DE), billing_region: Faker::Finance.stock_market, related_ticker: Faker::Finance.ticker(NYSE) } # {:card{:typemastercard, :number6771-8921-2291-6236, ...}, # :vatDE593306671, :billing_regionLSE, :related_tickerBRK.B}注意事项生成的卡号满足 Luhn 校验、VAT 满足各国格式模板但均为虚构数据不应在任何真实支付或税务系统中使用ticker只支持NASDAQ/NYSE传入其他交易所会抛ArgumentError使用前可用Faker::Base.fetch_all(finance.ticker.nasdaq)自行核对数据范围各方法生成的随机性可通过Faker::Config.random的种子完全控制便于编写确定性测试。总结Faker::Finance在 doc/default/finance.md 的四个示例背后对应了 lib/faker/default/finance.rb 中一套完整严谨的实现credit_card通过 11 种卡组织的 IIN 前缀模板加动态 Luhn 校验位生成可通过校验的卡号vat_number覆盖 30 国家/地区的真实税号格式并给出清晰的ArgumentError报错ticker与stock_market提供 NASDAQ/NYSE 代码及全球 20 大交易所名称。数据全部托管于 lib/locales/en/finance.yml行为由 test/faker/default/test_faker_finance.rb 全面验证。无论你是为支付网关、税务接口还是行情组件造数据这套 API 都能在保证像真的的同时严格可控。【免费下载链接】fakerA library for generating fake data such as names, addresses, and phone numbers.项目地址: https://gitcode.com/GitHub_Trending/fake/faker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →