module Sjekksum::Verhoeff
Module for calculation and validation of Verhoeff
checksums
@see en.wikipedia.org/wiki/Verhoeff_algorithm Verhoeff
algorithm
Constants
- DIHEDRAL_GROUP_D5
Table of multiplication in the dihedral group D5
- INVERSE
The multiplicative inverse of a digit in the dihedral group D5
- PERMUTATION
The permutation table
Public Instance Methods
convert(number)
click to toggle source
Transforms a number by appending the Verhoeff
checksum digit
@example
Sjekksum::Verhoeff.convert(142857) #=> 1428570
@param number [Integer, String] number without a checksum
@return [Integer, String] final number including the checksum
# File lib/sjekksum/verhoeff.rb, line 85 def convert number raise_on_type_mismatch number typed_conversion number end
Also aliased as: transform
of(number)
click to toggle source
Calculates Verhoeff
checksum
@example
Sjekksum::Verhoeff.of(142857) #=> 0
@param number [Integer, String] number for which the checksum should be calculated
@return [Integer] calculated checksum
# File lib/sjekksum/verhoeff.rb, line 49 def of number raise_on_type_mismatch number digits = convert_number_to_digits(number) INVERSE[digits.reverse_each.with_index.reduce(0) { |check, (digit, idx)| d_row = DIHEDRAL_GROUP_D5[check] d_row[ PERMUTATION[idx.next % 8][digit] ] }] end
Also aliased as: checksum
valid?(number)
click to toggle source
Verhoeff
validation of provided number
@example
Sjekksum::Verhoeff.valid?(1428570) #=> true
@param number [Integer, String] number with included checksum
@return [Boolean]
# File lib/sjekksum/verhoeff.rb, line 69 def valid? number raise_on_type_mismatch number num, check = split_number(number) self.of(num) == check end
Also aliased as: is_valid?