class Uy::Id

Constants

FACTORS

Attributes

id[RW]

Public Class Methods

new(id=nil) click to toggle source
# File lib/uy/id.rb, line 7
def initialize(id=nil)
  @id = id || Id.generate
end

Protected Class Methods

calculate_check_digit(id) click to toggle source
# File lib/uy/id.rb, line 22
def self.calculate_check_digit(id)
  id = id.length == 8 ? id.chop : id
  checksum =
    id
    .chars
    .to_a
    .map(&:to_i)
    .zip(FACTORS)
    .map {|d| d.reduce(&:*)}
    .reduce(:+)
  check_digit = (10 - (checksum % 10)) % 10
  check_digit
end
generate() click to toggle source
# File lib/uy/id.rb, line 36
def self.generate
  id = ''
  7.times { id += rand(0..9).to_s }
  id += calculate_check_digit(id).to_s
  id
end

Public Instance Methods

is_valid?() click to toggle source
# File lib/uy/id.rb, line 11
def is_valid?
  return false unless @id =~ /\d{8}/
  return false unless Id.calculate_check_digit(@id) == @id[7].to_i

  true
end
Also aliased as: valid?
valid?()
Alias for: is_valid?