class NationalIdentificationNumber::Danish
Attributes
date[R]
Protected Instance Methods
repair()
click to toggle source
Calls superclass method
NationalIdentificationNumber::Base#repair
# 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