class SocialSecurityNumber::No

SocialSecurityNumber::No validates Norway eleven-digit birth number (fødselsnummer) en.wikipedia.org/wiki/National_identification_number#Norway

Constants

CONTROLCIPHERS_1
CONTROLCIPHERS_2
MODULUS
REGEXP

Public Instance Methods

day() click to toggle source
# File lib/social_security_number/country/no.rb, line 33
def day
  @day = @parsed_civil_number[:day].to_i % 40
end
validate() click to toggle source
# File lib/social_security_number/country/no.rb, line 5
def validate
  @error = if !check_by_regexp(REGEXP)
             'bad number format'
           elsif !birth_date
             'number birth date is invalid'
           elsif !check_control_digit_1
             'first control code invalid'
           elsif !check_control_digit_2
             'second control code invalid'
           end
end
year() click to toggle source
# File lib/social_security_number/country/no.rb, line 17
def year
  if @parsed_civil_number
    year_value = (@parsed_civil_number[:indv].to_i * 10 + @parsed_civil_number[:gnd].to_i).to_i
    base = case year_value
           when 000..499 then 1900
           when 500..899 then @parsed_civil_number[:year].to_i >= 54 ? 1800 : 2000
           when 900..999 then @parsed_civil_number[:year].to_i >= 40 ? 1900 : 2000
           else
             0
           end
    @year = base + @parsed_civil_number[:year].to_i
  else
    0
  end
end

Private Instance Methods

check_control_digit_1() click to toggle source
# File lib/social_security_number/country/no.rb, line 46
def check_control_digit_1
  ctrl = 11 - calc_sum(digit_number[0, 9], CONTROLCIPHERS_1) % MODULUS
  (ctrl % MODULUS).to_s == @civil_number[-2]
end
check_control_digit_2() click to toggle source
# File lib/social_security_number/country/no.rb, line 51
def check_control_digit_2
  ctrl = 11 - calc_sum(digit_number[0, 10], CONTROLCIPHERS_2) % MODULUS
  (ctrl % MODULUS).to_s == @civil_number[-1]
end