class NationalIdentificationNumber::Danish

Attributes

date[R]

Protected Instance Methods

repair() click to toggle source
# File lib/national_identification_number/danish.rb, line 9
def repair
  super
  @number.gsub!(/[^0-9]/, '')
  if (matches = @number.match(/\A(?<birthday>[0-9]{6})(?<checksum>[0-9]{4})\z/))
    birthday, checksum = %w[birthday checksum].map { |group| matches[group] }
    @number = "#{birthday}-#{checksum}"
  end
end
validate() click to toggle source
# File lib/national_identification_number/danish.rb, line 18
def validate
  if (matches = @number.match(/\A(?<day>\d{2})(?<month>\d{2})(?<year>\d{2})-(?<serial>\d{3})(?<checksum>\d{1})\z/))
    day, month, year, serial, checksum = %i[day month year serial checksum].map { |group| matches[group] }
    begin
      @date = Date.parse("#{full_year(serial, year)}-#{month}-#{day}")
      @valid = true
      @number = "#{day}#{month}#{year}-#{serial}#{checksum}"
    rescue ArgumentError
    end
  end
end

Private Instance Methods

century(serial, year) click to toggle source
# File lib/national_identification_number/danish.rb, line 36
def century(serial, year)
  first_digit = serial[0].to_i
  return 1800 if (5..8).include?(first_digit) && year > 57
  return 2000 if (4..9).include?(first_digit) && year < 37
  1900
end
full_year(serial, year) click to toggle source
# File lib/national_identification_number/danish.rb, line 32
def full_year(serial, year)
  century(serial, year.to_i) + year.to_i
end