class FauxData::NationalIdGenerator
Public Class Methods
new(opts = {})
click to toggle source
# File lib/faux_data/national_id_generator.rb, line 7 def initialize(opts = {}) options = { :country_code => 'us' }.merge(opts) @country_code = options[:country_code] @@consumed_national_ids = Array.new end
Public Instance Methods
national_id()
click to toggle source
# File lib/faux_data/national_id_generator.rb, line 16 def national_id id = '' while (not valid_national_id_us?(id)) id = generate_national_id_us if @country_code == 'us' #pp id end @@consumed_national_ids << id return id end
national_ids()
click to toggle source
# File lib/faux_data/national_id_generator.rb, line 25 def national_ids ids = Array.new ids.replace @@consumed_national_ids return ids end
Private Instance Methods
generate_national_id_us()
click to toggle source
# File lib/faux_data/national_id_generator.rb, line 33 def generate_national_id_us ssn = "#{rand(1000).to_s.rjust(3,'0')}-#{rand(100).to_s.rjust(2,'0')}-#{rand(10000).to_s.rjust(4,'0')}" return ssn end
valid_national_id_us?(ssn)
click to toggle source
Test to see if valid SSN using IRS rules on SSN
SSN can be broken down into Area, Group, and Serial Number as AAA-GG-SSSS
Area Numbers: excluding area numbers 000, 666 and 900-999. Group Numbers: SSN randomization will not assign group number 00 Serial NUmbers: SSN randomization will not assign serial number 0000. SSNs containing group number 00 or serial number 0000 will continue to be invalid.
# File lib/faux_data/national_id_generator.rb, line 48 def valid_national_id_us?(ssn) return false if @@consumed_national_ids.include?(ssn) ssn = ssn.delete('-') return false if not ssn =~ /^(\d){9}$/ #test for 9 digits ssn = Hash[* [:area, :group, :serial].zip(ssn.unpack("A3A2A4")).flatten] return false if ssn[:group] == '00' return false if ssn[:serial] == '0000' return false if ssn[:area] == '000' return false if ssn[:area] == '666' return false if ssn[:area].to_i >= 900 and ssn[:area].to_i <=999 return true end