module Sjekksum::Damm

Module for calculation and validation of Damm checksums

@see en.wikipedia.org/wiki/Damm_algorithm Damm algorithm

Constants

QUASIGROUP

The totally anti-symmetric quasigroup @see archiv.ub.uni-marburg.de/diss/z2004/0516/pdf/dhmd.pdf [PDF] Damm, H. Michael (2004). Total anti-symmetrische Quasigruppen (Dr. rer. nat.). Philipps-Universität Marburg.

Public Instance Methods

checksum(number)
Alias for: of
convert(number) click to toggle source

Transforms a number by appending the Damm checksum digit

@example

Sjekksum::Damm.convert(572) #=> 5724

@param number [Integer, String] number without a checksum

@return [Integer, String] final number including the checksum

# File lib/sjekksum/damm.rb, line 66
def convert number
  raise_on_type_mismatch number
  typed_conversion number
end
Also aliased as: transform
is_valid?(number)
Alias for: valid?
of(number) click to toggle source

Calculates Damm checksum

@example

Sjekksum::Damm.of(572) #=> 4

@param number [Integer, String] number for which the checksum should be calculated

@return [Integer] calculated checksum

# File lib/sjekksum/damm.rb, line 35
def of number
  raise_on_type_mismatch number
  digits = convert_number_to_digits(number)
  digits.reduce(0){ |check, digit| QUASIGROUP[check][digit] }
end
Also aliased as: checksum
transform(number)
Alias for: convert
valid?(number) click to toggle source

Damm validation of provided number

@example

Sjekksum::Damm.valid?(5724) #=> true

@param number [Integer, String] number with included checksum

@return [Boolean]

# File lib/sjekksum/damm.rb, line 51
def valid? number
  raise_on_type_mismatch number
  self.of(number).zero?
end
Also aliased as: is_valid?