Module: Israeli::Luhn

Defined in:
lib/israeli/luhn.rb

Overview

Luhn algorithm (mod 10) implementation for checksum validation.

Used by Israeli ID numbers (Mispar Zehut) and potentially business registration numbers. The Israeli variant uses a left-to-right processing order (index 0 = multiplier 1, index 1 = multiplier 2, etc.).

Class Method Summary collapse

Class Method Details

.valid?(digits) ⇒ Boolean

Validates a string of digits using the Luhn algorithm.

Examples:

Valid ID

Israeli::Luhn.valid?("123456782") # => true

Invalid ID

Israeli::Luhn.valid?("123456789") # => false

Parameters:

  • digits (String)

    A string containing only digits (0-9)

Returns:

  • (Boolean)

    true if the checksum is valid, false otherwise



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/israeli/luhn.rb', line 23

def self.valid?(digits)
  return false if digits.nil? || digits.empty?
  return false unless digits.match?(/\A\d+\z/)

  sum = digits.chars.each_with_index.sum do |char, index|
    digit = char.to_i * (index.even? ? 1 : 2)
    digit > 9 ? digit - 9 : digit
  end

  (sum % 10).zero?
end