class SpainDni::Dni

Attributes

id_number[RW]

Public Class Methods

new(id_number) click to toggle source
# File lib/spain_dni.rb, line 8
def initialize(id_number)
  @id_number = id_number.to_s
end

Public Instance Methods

calculate_check() click to toggle source
# File lib/spain_dni.rb, line 24
def calculate_check
  nie_letters = { X: 0, Y: 1, Z: 2 }
  number = if nie?
             [nie_letters[@id_number[0].to_sym], @id_number[1..-2]].join
           else
             @id_number.chop
           end
  number.to_i % 23
end
check_letter() click to toggle source
# File lib/spain_dni.rb, line 20
def check_letter
  @id_number[-1]
end
dni?() click to toggle source
# File lib/spain_dni.rb, line 12
def dni?
  !@id_number[0].match(/\d/).nil?
end
id_type() click to toggle source
# File lib/spain_dni.rb, line 50
def id_type
  return nil unless valid?
  nie? ? 'NIE' : 'DNI'
end
nie?() click to toggle source
# File lib/spain_dni.rb, line 16
def nie?
  @id_number[0].match(/\d/).nil?
end
valid?() click to toggle source
# File lib/spain_dni.rb, line 46
def valid?
  check_letter == valid_letter
end
valid_letter() click to toggle source
# File lib/spain_dni.rb, line 34
def valid_letter
  verifiers = {
    0 => 'T', 1 => 'R', 2 => 'W', 3 => 'A', 4 => 'G', 5 => 'M',
    6 => 'Y', 7 => 'F', 8 => 'P', 9 => 'D', 10 => 'X', 11 => 'B',
    12 => 'N',      13 => 'J', 14 => 'Z' ,15 => 'S', 16 => 'Q',
    17 => 'V', 18 => 'H', 19 => 'L', 20 => 'C', 21 => 'K',  22 => 'E'
  }
  verifiers.each do |key, value|
    return value if calculate_check.to_i == key
  end
end