class NationalIdentificationNumber::Finnish
Constants
- CHECKSUMS
Attributes
Public Class Methods
Source
# File lib/national_identification_number/finnish.rb, line 50 def self.calculate_checksum(number) CHECKSUMS[number.to_i % 31] end
Protected Instance Methods
Source
# File lib/national_identification_number/finnish.rb, line 12 def repair super if @number.match(/(\d{6})(\-{0,1})(\d{3})([#{CHECKSUMS.join('')}]{1})/) @number = "#{$1}-#{$3}#{$4}" else @number.gsub!(/[^#{CHECKSUMS.join('')}\-\+]/, '') end end
Calls superclass method
NationalIdentificationNumber::Base#repair
Source
# File lib/national_identification_number/finnish.rb, line 21 def validate if @number.match(/(\d{2})(\d{2})(\d{2})([\-\+A]{0,1})(\d{3})([#{CHECKSUMS.join('')}]{1})/) checksum = self.class.calculate_checksum("#{$1}#{$2}#{$3}#{$5}") if checksum == $6 day = $1.to_i month = $2.to_i year = $3.to_i divider ||= $4 ||'-' serial = $5.to_i century = case divider when '+' then 1800 when 'A' then 2000 else 1900 end begin @date = Date.parse("#{century+year}-#{month}-#{day}") @valid = true @number = ("#{$1}#{$2}#{$3}#{divider}#{$5}#{checksum}") rescue ArgumentError end end end end