Module: Olyx::Guardrails::Pii::LuhnChecksum

Defined in:
lib/olyx/guardrails/pii/luhn_checksum.rb

Overview

Shared Luhn digit-parsing and checksum validity, reused by every format that applies the Luhn algorithm at its own fixed or minimum length (cards, Canadian SIN) so that length rule is the only thing each caller needs to own.

Class Method Summary collapse

Class Method Details

.checksum(digits) ⇒ Object



17
18
19
# File 'lib/olyx/guardrails/pii/luhn_checksum.rb', line 17

def checksum(digits)
  digits.reverse.each_with_index.sum { |digit, index| index.even? ? digit : doubled(digit) }
end

.digits(number) ⇒ Object



13
# File 'lib/olyx/guardrails/pii/luhn_checksum.rb', line 13

def digits(number) = number.gsub(/\D/, '').chars.map(&:to_i)

.valid?(digits) ⇒ Boolean

Returns:

  • (Boolean)


15
# File 'lib/olyx/guardrails/pii/luhn_checksum.rb', line 15

def valid?(digits) = (checksum(digits) % 10).zero?