Module: Validatr::Verhoeff
- Extended by:
- Utils
- Defined in:
- lib/validatr/verhoeff.rb
Constant Summary collapse
- D =
[ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] ].freeze
- F =
[ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8] ].freeze
- INV =
[0, 4, 3, 2, 1, 5, 6, 7, 8, 9].freeze
Class Method Summary collapse
-
.check_digit(number) ⇒ Object
Generates the check digit for a number.
- .encode(digits) ⇒ Object
-
.valid?(number) ⇒ Boolean
Returns true if a number is a valid Verhoeff number, false otherwise.
Methods included from Utils
Class Method Details
.check_digit(number) ⇒ Object
Generates the check digit for a number
41 42 43 44 45 46 |
# File 'lib/validatr/verhoeff.rb', line 41 def self.check_digit(number) digits = digits_from_number(number) digits.push(0) c = encode(digits) INV[c] end |
.encode(digits) ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/validatr/verhoeff.rb', line 48 def self.encode(digits) c = 0 digits.reverse.map.with_index do |d, i| f = F[i % 8][d] c = D[c][f] end c end |
.valid?(number) ⇒ Boolean
Returns true if a number is a valid Verhoeff number, false otherwise
34 35 36 37 38 |
# File 'lib/validatr/verhoeff.rb', line 34 def self.valid?(number) digits = digits_from_number(number) c = encode(digits) c.zero? end |