class PeselInspector
Fetch birth date, sex and series number from PESEL number
Constants
- CENTURIES
- ERROR_MESSAGE
- PESEL_LENGTH
- PeselError
Attributes
birth_date[R]
pesel[R]
series_number[R]
sex[R]
Public Class Methods
new(pes)
click to toggle source
# File lib/pesel_inspector.rb, line 18 def initialize(pes) pesel = pes.to_s validate(pesel) @pesel = pesel @birth_date = parse_birth_date @sex = pesel[9].to_i.even? ? 'female' : 'male' @series_number = pesel[6..9] end
Private Instance Methods
day()
click to toggle source
# File lib/pesel_inspector.rb, line 42 def day pesel[4..5] end
month()
click to toggle source
# File lib/pesel_inspector.rb, line 46 def month pesel[2..3].to_i % 20 end
parse_birth_date()
click to toggle source
# File lib/pesel_inspector.rb, line 29 def parse_birth_date begin date = Date.parse [day, month, year].join('/') rescue ArgumentError raise PeselError, ERROR_MESSAGE end date end
validate(p)
click to toggle source
rubocop:disable AbcSize
# File lib/pesel_inspector.rb, line 51 def validate(p) raise PeselError, ERROR_MESSAGE unless p.size == PESEL_LENGTH p = p.split('').map(&:to_i) primo = p[0] + 3 * p[1] + 7 * p[2] + 9 * p[3] secondo = p[4] + 3 * p[5] + 7 * p[6] + 9 * p[7] + p[8] + 3 * p[9] + p[10] raise PeselError, ERROR_MESSAGE unless (primo + secondo) % 10 == 0 end
year()
click to toggle source
# File lib/pesel_inspector.rb, line 38 def year CENTURIES[pesel[2]] + pesel[0..1] end