class SocialSecurityNumber::Country

SocialSecurityNumber::Country

Constants

DATE_REGEXP
SHORT_DATE2_REGEXP
SHORT_DATE_REGEXP

Attributes

birth_date[RW]
civil_number[RW]
control_number[RW]
error[RW]
individual[RW]

Public Class Methods

new(civil_number) click to toggle source
# File lib/social_security_number/country.rb, line 13
def initialize(civil_number)
  @civil_number = civil_number.to_s.upcase
  values_from_number if self.class.const_defined?('REGEXP')
end

Public Instance Methods

digit_number() click to toggle source
# File lib/social_security_number/country.rb, line 28
def digit_number
  @civil_number.gsub(/[^\d]/, '')
end
gender() click to toggle source
# File lib/social_security_number/country.rb, line 32
def gender
  return unless @parsed_civil_number.names.include?('gnd')
  @gender ||= @parsed_civil_number[:gnd].to_i.odd? ? :male : :female
end
parsed_civil_number() click to toggle source
# File lib/social_security_number/country.rb, line 24
def parsed_civil_number
  @parsed_civil_number ||= @civil_number.match(self.class::REGEXP)
end
valid?() click to toggle source
# File lib/social_security_number/country.rb, line 18
def valid?
  @error = nil
  validate
  @error.nil?
end

Private Instance Methods

calc_sum(number, ciphers) click to toggle source
# File lib/social_security_number/country.rb, line 39
def calc_sum(number, ciphers)
  digits = number.split(//)

  sum = 0
  digits.each_with_index do |digit, i|
    sum += digit.to_i * ciphers[i].to_i
  end
  sum
end
check_by_regexp(regexp) click to toggle source
# File lib/social_security_number/country.rb, line 54
def check_by_regexp(regexp)
  return false unless @civil_number =~ regexp
  true
end
check_digits() click to toggle source
# File lib/social_security_number/country.rb, line 49
def check_digits
  return false unless @civil_number =~ /\A\d+\z/
  true
end
check_length(size) click to toggle source
# File lib/social_security_number/country.rb, line 59
def check_length(size)
  return false unless @civil_number.length == size
  true
end
date() click to toggle source
# File lib/social_security_number/country.rb, line 80
def date
  year
  month
  day
  return unless @year && @month && @day &&
                Date.valid_date?(@year, @month, @day)
  @birth_date = Date.new(@year, @month, @day)
end
day() click to toggle source
# File lib/social_security_number/country.rb, line 76
def day
  @day ||= value_from_parsed_civil_number('day').to_i
end
month() click to toggle source
# File lib/social_security_number/country.rb, line 72
def month
  @month ||= value_from_parsed_civil_number('month').to_i
end
value_from_parsed_civil_number(key) click to toggle source
# File lib/social_security_number/country.rb, line 89
def value_from_parsed_civil_number(key)
  return unless @parsed_civil_number.names.include?(key)
  @parsed_civil_number[key.to_sym].to_s
end
values_from_number() click to toggle source
# File lib/social_security_number/country.rb, line 94
def values_from_number
  parsed_civil_number
  return unless @parsed_civil_number
  @individual = value_from_parsed_civil_number('indv')
  @control_number = value_from_parsed_civil_number('ctrl')
  gender
  date
end
year() click to toggle source
# File lib/social_security_number/country.rb, line 64
def year
  return unless @parsed_civil_number.names.include?('year')
  current_year = Time.now.year % 100
  offset_year = @parsed_civil_number[:year].to_i
  offset_year += 100 if offset_year && offset_year < current_year
  @year ||= 1900 + offset_year.to_i
end