Sha256: 7b5e712f81e3d72e4aa74d93e237531c43788e56488a5f0c702000bcd5778b90

Contents?: true

Size: 639 Bytes

Versions: 1

Compression:

Stored size: 639 Bytes

Contents

module Sjekksum
  module Luhn
    extend self
    extend Shared

    def of input_value
      raise_on_type_mismatch input_value
      digits = input_value.to_s.chars.map(&:to_i)
      sum    = digits.reverse.map.with_index do |digit, idx|
        idx.even? ? (digit * 2).divmod(10).reduce(&:+) : digit
      end.reverse.reduce(&:+)

      (10 - sum % 10) % 10
    end

    def valid? input_value
      raise_on_type_mismatch input_value
      self.of(input_value.div(10)) == (input_value % 10)
    end

    def convert input_value
      raise_on_type_mismatch input_value
      (input_value * 10) + self.of(input_value)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sjekksum-0.0.1 lib/sjekksum/luhn.rb