class ISNI
Public Class Methods
complete(num)
click to toggle source
Purely for generating new ISNI
numbers
# File lib/isni.rb 30 def self.complete(num) 31 num = num.to_s.gsub(/[^\dxX]/, "") 32 return nil unless num.length == 15 && num.match(/\A\d+\Z/) 33 34 sum = num.chars.map(&:to_i).inject(0) do |accum,i| 35 if accum == 0 36 accum = i * 2 37 else 38 accum = (accum + i) * 2 39 end 40 end 41 remainder = 12 - (sum % 11) % 11 42 if remainder == 10 43 check = "X" 44 else 45 check = remainder 46 end 47 48 "#{num}#{check}" 49 end
new(str)
click to toggle source
# File lib/isni.rb 3 def initialize(str) 4 @number = str.to_s.gsub(/[^\dxX]/, "") 5 end
valid?(isni)
click to toggle source
# File lib/isni.rb 23 def self.valid?(isni) 24 isni = isni.to_s.gsub(/[^\dxX]/, "") 25 isni.length == 16 && isni == ISNI.complete(isni[0,15]) 26 end
Public Instance Methods
to_s()
click to toggle source
output a hyphenated version of this ISNI
# File lib/isni.rb 12 def to_s 13 if valid? 14 [ 15 @number[0,4], 16 @number[4,4], 17 @number[8,4], 18 @number[12,4], 19 ].join("-") 20 end 21 end
valid?()
click to toggle source
# File lib/isni.rb 7 def valid? 8 ISNI.valid? @number 9 end