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