class SocialSecurityNumber::Gb

SocialSecurityNumber::Gb validates United Kingdom National Insurance number (NINO) and National Health Service number, CHI (Community Health Index) number en.wikipedia.org/wiki/National_identification_number#United_Kingdom

Constants

CHI_REGEXP
NHS_REGEXP
NINO_REGEXP

Public Instance Methods

validate() click to toggle source
# File lib/social_security_number/country/gb.rb, line 6
def validate
  @error = if !validate_formats
             'bad number format'
           elsif check_length(10) && !(nhs_validation || chi_validation)
             'bad CHI, NHS number'
           end
end

Private Instance Methods

base_year(year) click to toggle source
# File lib/social_security_number/country/gb.rb, line 44
def base_year(year)
  current_year = Time.now.year % 100
  offset_year = year.to_i
  offset_year += 100 if year and offset_year < current_year
  1900 + offset_year
end
check_control_sum() click to toggle source
# File lib/social_security_number/country/gb.rb, line 51
def check_control_sum
  count_last_number == @civil_number[9].to_i
end
check_date() click to toggle source
# File lib/social_security_number/country/gb.rb, line 36
def check_date
  day = @civil_number[0..1]
  month = @civil_number[2..3]
  year = @civil_number[4..6]

  Date.valid_date?(base_year(year).to_i, month.to_i, day.to_i)
end
check_nino_format() click to toggle source
# File lib/social_security_number/country/gb.rb, line 24
def check_nino_format
  check_by_regexp(NINO_REGEXP) && !check_by_regexp(/^(GB|BG|NK|KN|TN|NT|ZZ)/)
end
chi_validation() click to toggle source
# File lib/social_security_number/country/gb.rb, line 32
def chi_validation
  check_date
end
count_last_number() click to toggle source
# File lib/social_security_number/country/gb.rb, line 55
def count_last_number
  result_array = []
  9.times do |i|
    result_array << ((11 - (i + 1)) * @civil_number[i].to_i)
  end
  if (11 - (result_array.inject(:+) % 11)) == 10
    return false
  else
    return 0 if result_array.inject(:+) % 11 == 0
    return 11 - (result_array.inject(:+) % 11)
  end
end
nhs_validation() click to toggle source
# File lib/social_security_number/country/gb.rb, line 28
def nhs_validation
  check_control_sum
end
validate_formats() click to toggle source
# File lib/social_security_number/country/gb.rb, line 20
def validate_formats
  check_nino_format || check_by_regexp(NHS_REGEXP) || check_by_regexp(CHI_REGEXP)
end