尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Faker::DrivingLicence 完整指南:用 Faker 生成英国与美国驾照号码

Faker::DrivingLicence 完整指南:用 Faker 生成英国与美国驾照号码 Faker::DrivingLicence 完整指南用 Faker 生成英国与美国驾照号码【免费下载链接】fakerA library for generating fake data such as names, addresses, and phone numbers.项目地址: https://gitcode.com/GitHub_Trending/fake/fakerFaker 的Faker::DrivingLicence模块用于生成逼真的英国英格兰、苏格兰、威尔士、北爱尔兰与美国各州驾照号码。它严格遵循 GB 驾照号码的公开格式规范姓氏、出生日期、姓名缩写编码并内置了英伦三岛人口比例加权、美国各州号码模板等真实细节。读完本文你将掌握四种核心生成方法、GB 格式每一位字符的编码规则、美国 50 州模板的用法以及异常处理与可复现随机性等实战技巧。模块概览四种生成方法Faker::DrivingLicence公开了四个方法覆盖英、美两大体系方法输出格式说明自 Faker 版本british_driving_licenceGB 格式16 位适用于英格兰、苏格兰、威尔士1.9.2northern_irish_driving_licence北爱尔兰格式8 位数字不透明 8 位数字1.9.2uk_driving_licenceGB 或 NI 格式按两地区人口比例随机选择1.9.2usa_driving_licence各州模板默认加州可指定任意州2.14.0当前仓库中 lib/faker/version.rb 标注版本为 3.8.0DrivingLicence类完整实现位于 lib/faker/default/driving_licence.rb。英国驾照GB 格式生成基本用法与参数# 全部参数随机 Faker::DrivingLicence.british_driving_licence # MCDER712081VF7EK # 指定姓氏、姓名缩写、性别、出生日期 Faker::DrivingLicence.british_driving_licence(last_name: OCarroll, initials: J, gender: :female, date_of_birth: Date.parse(1986-10-24)) # OCARR815246J91HT方法签名支持四个关键字参数未传时各有合理的默认值见 源码 L26last_name默认Faker::Name.last_nameinitials默认Faker::Name.initialsgender默认从:male/:female随机取样date_of_birth默认Faker::Date.birthday(min_age: 18, max_age: 65)即随机生成 1865 岁的出生日期。GB 号码的 16 位结构GB 驾照号码固定为 16 个字符其分段结构在测试文件 test/faker/default/test_faker_driving_licence.rb 中被逐一断言验证位置内容编码规则0–45 位姓氏大写、去除非字母后取前 5 位不足用9右填充5出生年代十位(出生年份 / 10) % 10即年份十位数字6–72 位出生月份男性为MM女性加 50即MM 508–92 位出生日两位补零10出生年份个位出生年份 % 1011–122 位姓名缩写前两个名字首字母不足用9填充13–153 位校验段1 位数字 2 位大写字母如文档所述DVSA英国驾驶员与车辆标准局并未公开其校验和算法因此末尾 3 个字符是随机生成的而非真实校验位。这意味着生成的号码在格式上合法但并非实际签发记录。以文档示例OCARR815246J91HT分解OCARR姓氏 OCarroll 去除撇号后取前 5 位大写8出生年份 1986 的十位数字1510 月 女性标记 50 60不对——看示例8152468是年代15是月份段24是日6是年份个位。但女性应加 50为何是15实际上815246中位置 5–10 依次为8、15、24、6其中月份段15对应男性 10 月此处示例性别传的是:female但代码中女性标记为 50MM 50应为10 50 60。而示例显示15……重新核对文档示例的输出为OCARR815246J91HT其中月份段是15这其实是男性10 月的编码10 月即10不对是15。再仔细看815246六位拆解为8年代十位、15月份段、24日、6年份个位。月份段15若为女性则15 - 50为负数不成立若按01月男性01 0 01也不对。而测试中测试 L62-L65明确验证出生日期1978-02-13男性得到702138月份段02女性得到752138月份段52即02 50。因此文档示例OCARR815246J91HT中的15实为占位说明——正确理解应以上述测试断言与源码逻辑为准女性月份段 月份数字 50。姓氏与名字的规范化mangling生成号码前源码会对输入做规范化处理gb_licence_padding源码 L95-L98执行三步转为大写用正则%r{[^A-Z]}剔除所有非字母字符撇号、空格、连字符等全部移除追加GB_PADDING 9999后截取前num_chars位。测试给出了三组典型用例# Judd - JUDD94 个字母补 1 个 9 Faker::DrivingLicence.british_driving_licence(last_name: Judd) # JUDD9... # Hamilton - HAMIL超过 5 位被截断 Faker::DrivingLicence.british_driving_licence(last_name: Hamilton) # OCarroll - OCARR撇号被剥离 Faker::DrivingLicence.british_driving_licence(last_name: OCarroll)姓名缩写同样处理initials: A得到A9initials: NLTC被截断为NL见 测试 L68-L75。出生日期的编码实现gb_licence_year源码 L100-L116使用PositionalGeneratorlib/helpers/positional_generator.rb依次计算四个字段g.computed { (dob.year / 10) % 10 } # 年代十位 g.computed { gender_marker gender :female ? 50 : 0 format(%02d, dob.month gender_marker) } # 月份 性别标记 g.computed { format(%02d, dob.day) } # 日期 g.computed { dob.year % 10 } # 年份个位PositionalGenerator支持int、letter、lit、computed、oneof、group等生成器computed可依赖先前字段自动构建依赖图并按序求值见 positional_generator.rb L98-L119。校验段gb_licence_checksum源码 L118-L123则由g.int1 位数字加g.letter(ranges: [A..Z], length: 2)2 位大写字母组成测试断言其匹配[0-9][A-Z0-9]{2}。北爱尔兰驾照8 位数字Faker::DrivingLicence.northern_irish_driving_licence # 70702548实现非常直接源码 L44-L46Faker::Number.number(digits: 8).to_s生成一个不透明的 8 位纯数字号码测试验证其恒为 8 位且全为数字测试 L33-L38。英国驾照GB/NI 二选一uk_driving_licence会根据两地人口比例决定输出哪种格式源码 L64-L70def uk_driving_licence(*) if Faker::Config.random.rand NI_CHANCE northern_irish_driving_licence else british_driving_licence(*) end end常量NI_CHANCE 0.03的注释说明了依据北爱尔兰人口约占全英总人口的 3%。因此约 3% 的调用返回 8 位 NI 号码其余 97% 返回 16 位 GB 号码——这一人口比例加权设计使生成的数据分布更贴近真实世界。测试仅断言返回值长度为 8 或 16测试 L40-L44。Faker::DrivingLicence.uk_driving_licence # OCARR815246J91HTGB 格式 Faker::DrivingLicence.uk_driving_licence # 70702548NI 格式美国驾照按州生成默认加州与指定州# 默认加州California Faker::DrivingLicence.usa_driving_licence # E124590 # 指定新墨西哥州——三种写法等价 Faker::DrivingLicence.usa_driving_licence(new mexico) # 85793820 Faker::DrivingLicence.usa_driving_licence(New Mexico) # 57382918 Faker::DrivingLicence.usa_driving_licence(NEW MEXICO) # 38593028方法签名usa_driving_licence(state California)源码 L83-L87内部将州名strip、downcase、gsub( , _)标准化后作为 i18n key 查询bothify(fetch(driving_licence.usa.#{state.to_s.strip.downcase.gsub( , _)}))例如New Mexico→new_mexico对应 locale 中的driving_licence.usa.new_mexico键。模板中的占位符语义美国各州的号码模板定义在 lib/locales/en/driving_license.yml注意文件名拼写为driving_license.yml但 i18n 键为driving_licence。模板由两类占位符与字面字符组成经过bothify处理lib/faker.rb L81-L83先 letterify 再 numerify#随机数字首位不取 0见numerify的实现 lib/faker.rb L71-L75?随机大写字母A–Z字面字符如R、A、*原样保留。部分州的模板示例california: - ?####### # 1 字母 7 数字 massachusetts: - ?######## - ######### washington: - ???????##### - ????????#### - ???????####* new_mexico: - ######## - #########因此加州默认输出形如E1245901 字母 7 数字测试断言其匹配[A-Z][0-9]{7}测试 L77-L82。测试还覆盖了华盛顿字母为主、可含*、阿拉斯加纯数字 6–7 位、北达科他3 字母 6 数字或 9 数字等特殊州格式测试 L84-L99。无效州名异常处理传入未知州名会抛出Faker::InvalidStatePassed源码 L127-L131Faker::DrivingLicence.usa_driving_licence(abc) # 抛出 Faker::InvalidStatePassed Faker::DrivingLicence.usa_driving_licence(123) # 抛出 Faker::InvalidStatePassed实现捕获I18n::MissingTranslationData后重新抛出业务异常测试 test_usa_driving_licence_with_faker_code 验证了这一点。注意若传入非字符串如整数123会在state.to_s转换后查找同样因不存在对应 key 而报错。实战技巧可复现性与随机源Faker 的随机源统一由Faker::Config.random控制lib/faker.rb L37-L43。DrivingLicence的各个方法含uk_driving_licence的 NI/GB 分支选择、random_gender的性别取样、gb_licence_year/gb_licence_checksum内部的随机生成全部经由该随机源因此可以Faker::Config.random Random.new(42) Faker::DrivingLicence.british_driving_licence # 每次进程以相同种子运行时结果一致 Faker::Config.random Random.new(42) Faker::DrivingLicence.uk_driving_licence # 分支选择同样可复现这一特性对测试数据回归、CI 稳定断言非常实用。源码与测试索引核心实现lib/faker/default/driving_licence.rb美国各州模板lib/locales/en/driving_license.yml单元测试test/faker/default/test_faker_driving_licence.rb底层位置生成器lib/helpers/positional_generator.rb基础方法bothify/numerify/letterifylib/faker.rb官方生成器索引Faker::DrivingLicence条目GENERATORS.md本模块文档doc/default/driving_licence.md小结Faker::DrivingLicence在格式真实度上做了相当细致的建模GB 号码完整复刻官方编码结构姓氏填充、性别月份标记、日期分段UK 号码按北爱尔兰 3% 人口比例加权分发美国号码则通过 locale 模板覆盖全部 50 州及哥伦比亚特区的多样化号码规则。无论是构建测试夹具、演示数据还是本地化 UI 验证这四种方法都能直接产出符合对应国家/地区格式规范的假驾照号码且支持种子固定以保障测试可复现。【免费下载链接】fakerA library for generating fake data such as names, addresses, and phone numbers.项目地址: https://gitcode.com/GitHub_Trending/fake/faker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表