Sha256: ac718f108d39dee459ff49079553dac45865963d1f8e9f7cb496921f4938d849
Contents?: true
Size: 1.89 KB
Versions: 1
Compression:
Stored size: 1.89 KB
Contents
module SsnValidator class Ssn attr_reader :ssn,:area,:group,:serial_number attr_reader :errors def initialize(ssn) @errors = [] ssn = ssn.to_s if ssn =~ /-/ && ssn !~ /\d\d\d-\d\d-\d\d\d\d/ @errors << 'Hyphen misplaced.' end ssn.gsub!('-','') if ssn.to_s.size != 9 @errors << 'SSN not 9 digits long.' end if ssn =~ /\D/ @errors << 'Non-digit found.' end #known dummy numbers if ["078051120","111111111","123456789","219099999","999999999"].include? ssn || (ssn >= "987654320" and ssn <= "987654329") @errors << "Known dummy SSN." end #known invalid area, group and serial numbers if ssn =~ /\d{3}00\d{4}|0000\Z/ @errors << "Invalid group or serial number." end @ssn = ssn @area = ssn.first(3) @group = ssn[3,2] @serial_number = ssn.last(4) if @errors.empty? @ssn_high_group_code = SsnHighGroupCode.find_by_area(@area, :order => 'as_of desc') if @ssn_high_group_code.nil? @errors << "Area '#{@area}' has not been assigned." else define_group_ranks if @group_ranks[@group] > @group_ranks[@ssn_high_group_code.group] @errors << "Group '#{@group}' has not been assigned yet for area '#{@area}'" end end end end def valid? @errors.empty? end private def define_group_ranks @group_ranks = {} rank = 0 (1..9).step(2) do |group| @group_ranks.merge!("0#{group.to_s}" => rank += 1) end (10..98).step(2) do |group| @group_ranks.merge!(group.to_s => rank += 1) end (2..8).step(2) do |group| @group_ranks.merge!("0#{group.to_s}" => rank += 1) end (11..99).step(2) do |group| @group_ranks.merge!(group.to_s => rank += 1) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
kevintyll-ssn_validator-0.1.1 | lib/ssn_validator/models/ssn_validator.rb |