Module: Croatia::PIN

Defined in:
lib/croatia/pin.rb

Overview

OIB - Osobni Identifikacijski Broj PIN - Personal Identification Number

Class Method Summary collapse

Class Method Details

.valid?(pin) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/croatia/pin.rb', line 6

def self.valid?(pin)
  return false unless pin

  pin = pin.to_s.strip
  return false unless pin.match?(/\A\d{11}\Z/)

  digits = pin.chars.map(&:to_i)
  control = digits.pop

  checksum = 10
  digits.each do |digit|
    checksum = (checksum + digit) % 10
    checksum = (checksum == 0 ? 10 : checksum) * 2 % 11
  end

  expected_control = (11 - checksum) % 10
  control == expected_control
end