class IdNumberLatam::EcDni

Attributes

digit[R]
third_digit[R]

Public Class Methods

new(id_number, opts = {}) click to toggle source
Calls superclass method IdNumberLatam::Base::new
# File lib/id_number_latam/ec_dni.rb, line 7
def initialize(id_number, opts = {})
  super
  @country     = :ec
  @third_digit = unformat[2]
  @digit       = @third_digit == "6" ? unformat[8] : unformat[9]
end

Public Instance Methods

format() click to toggle source
# File lib/id_number_latam/ec_dni.rb, line 14
def format
  dni = unformat
  digit = dni.slice!(-1)
  [dni, digit].join("-")
end
unformat() click to toggle source
# File lib/id_number_latam/ec_dni.rb, line 20
def unformat
  id_number.gsub(/\D/, "")
end
valid?() click to toggle source
# File lib/id_number_latam/ec_dni.rb, line 24
def valid?
  return false unless valid_length
  return false unless unformat[0..1].to_i <= 24
  return false unless [0, 1, 2, 3, 4, 5, 6, 9].include?(unformat[2].to_i)

  dni = unformat[0..8]
  (modulo - (dni.chars.zip(coefficient.chars).map { |p| p.map(&:to_i).inject(&:*) }.map { |r| operation_block(r) }.sum % modulo)).to_s == @digit
end

Private Instance Methods

coefficient() click to toggle source
# File lib/id_number_latam/ec_dni.rb, line 35
def coefficient
  if (0..5).include? @third_digit.to_i
    "212121212"
  elsif @third_digit == "6"
    "32765432"
  elsif @third_digit == "9"
    "432765432"
  end
end
modulo() click to toggle source
# File lib/id_number_latam/ec_dni.rb, line 45
def modulo
  (0..5).include?(@third_digit.to_i) ? 10 : 11
end
operation_block(prod) click to toggle source
# File lib/id_number_latam/ec_dni.rb, line 49
def operation_block(prod)
  if (0..5).include? @third_digit.to_i
    prod >= 10 ? prod - 9 : prod
  else
    prod
  end
end
valid_length() click to toggle source
# File lib/id_number_latam/ec_dni.rb, line 57
def valid_length
  [10, 13].include?(unformat.size)
end