Class: Synthra::Types::PersonalNames::NationalId

Inherits:
Base
  • Object
show all
Defined in:
lib/synthra/types/personal_names/national_id.rb

Overview

National ID type generator

Generates government-issued identifier numbers. Supports multiple country formats.

Examples:

Generate SSN

national_id = NationalId.new
national_id.generate(rng, context, { country: :us }, :random)
# => "123-45-6789"

Instance Method Summary collapse

Instance Method Details

#generate_edge(rng, context, args) ⇒ String

Generate edge case values

Parameters:

Returns:

  • (String)

    edge case value



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

Parameters:

Returns:

  • (Object)

    invalid value



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

Parameters:

Options Hash (args):

  • :country (Symbol, String)

    country code (:us, :uk, :ca, etc.)

Returns:

  • (String)

    generated national ID



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