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