Class: KuwaitiCivilId::CivilIdValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/kuwaiti_civil_id.rb

Class Method Summary collapse

Class Method Details

.valid?(id_number) ⇒ Boolean

Returns:

  • (Boolean)


10
11
12
13
14
15
16
17
18
19
# File 'lib/kuwaiti_civil_id.rb', line 10

def self.valid?(id_number)
  return false unless id_number.to_s.match?(/\A\d{12}$\z/)

  digits = id_number.to_s.chars.map(&:to_i)
  checksum = digits.pop
  coefficients = [2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  sum = digits.zip(coefficients).sum { |d, c| d * c }
  calculated_checksum = 11 - (sum % 11)
  calculated_checksum == checksum
end