Module: Validatr::Damm

Extended by:
Utils
Defined in:
lib/validatr/damm.rb

Constant Summary collapse

TASQ =

Totally Anti-Symmetric Quasigroup

[
  [0, 3, 1, 7, 5, 9, 8, 6, 4, 2],
  [7, 0, 9, 2, 1, 5, 4, 8, 6, 3],
  [4, 2, 0, 6, 8, 7, 1, 3, 5, 9],
  [1, 7, 5, 0, 9, 8, 3, 4, 2, 6],
  [6, 1, 2, 3, 0, 4, 5, 9, 7, 8],
  [3, 6, 7, 4, 2, 0, 9, 5, 8, 1],
  [5, 8, 6, 9, 7, 2, 0, 1, 3, 4],
  [8, 9, 4, 5, 3, 6, 2, 0, 1, 7],
  [9, 4, 3, 8, 6, 1, 7, 2, 0, 5],
  [2, 5, 8, 1, 4, 3, 6, 7, 9, 0]
].freeze

Class Method Summary collapse

Methods included from Utils

digits_from_number

Class Method Details

.check_digit(number) ⇒ Object

Generates the check digit for a number



27
28
29
# File 'lib/validatr/damm.rb', line 27

def self.check_digit(number)
  encode number
end

.encode(number) ⇒ Object



31
32
33
34
35
36
# File 'lib/validatr/damm.rb', line 31

def self.encode(number)
  digits = digits_from_number(number)
  i = 0
  digits.map { |c| i = TASQ[i][c] }
  i
end

.valid?(number) ⇒ Boolean

Returns true if a number is a valid Damm number, false otherwise

Returns:

  • (Boolean)


22
23
24
# File 'lib/validatr/damm.rb', line 22

def self.valid?(number)
  encode(number).zero?
end