Class: Synthra::Types::PersonalNames::NationalId
- Defined in:
- lib/synthra/types/personal_names/national_id.rb
Overview
National ID type generator
Generates government-issued identifier numbers. Supports multiple country formats.
Instance Method Summary collapse
-
#generate_edge(rng, context, args) ⇒ String
Generate edge case values.
-
#generate_invalid(rng, context, args) ⇒ Object
Generate invalid values.
-
#generate_random(rng, context, args) ⇒ String
Generate national ID based on country.
Instance Method Details
#generate_edge(rng, context, args) ⇒ String
Generate edge case values
72 73 74 |
# File 'lib/synthra/types/personal_names/national_id.rb', line 72 def generate_edge(rng, context, args) ["", "000-00-0000", "999-99-9999", "123"].sample(random: rng.instance_variable_get(:@random)) end |
#generate_invalid(rng, context, args) ⇒ Object
Generate invalid values
83 84 85 |
# File 'lib/synthra/types/personal_names/national_id.rb', line 83 def generate_invalid(rng, context, args) [nil, 123, [], {}, true, "invalid-ssn", "ABC-DEF-GHIJ"].sample(random: rng.instance_variable_get(:@random)) end |
#generate_random(rng, context, args) ⇒ String
Generate national ID based on country
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/synthra/types/personal_names/national_id.rb', line 43 def generate_random(rng, context, args) country = (args[:country] || :us).to_sym case country when :us # US SSN format: XXX-XX-XXXX format("%03d-%02d-%04d", rng.int(100, 999), rng.int(10, 99), rng.int(1000, 9999)) when :uk # UK NINO format: AB123456C prefix = rng.sample(("AA".."ZZ").to_a.reject { |x| x.match?(/[IOQZ]/) }) numbers = format("%06d", rng.int(0, 999_999)) suffix = rng.sample(("A".."Z").to_a.reject { |x| ["I", "O", "Q", "Z"].include?(x) }) "#{prefix}#{numbers}#{suffix}" when :ca # Canadian SIN format: XXX XXX XXX format("%03d %03d %03d", rng.int(100, 999), rng.int(100, 999), rng.int(100, 999)) else # Default: simple numeric format format("%09d", rng.int(100_000_000, 999_999_999)) # fallback end end |