class ISBN10

Public Class Methods

complete(nine) click to toggle source

Purely for generating new ean numbers

   # File lib/isbn10.rb
30 def self.complete(nine)
31   nine = nine.to_s
32   return nil unless nine.length == 9 && nine.match(/\d{9}/)
33 
34   check = nine[0,1].to_i
35   check = check + nine[1,1].to_i * 2
36   check = check + nine[2,1].to_i * 3
37   check = check + nine[3,1].to_i * 4
38   check = check + nine[4,1].to_i * 5
39   check = check + nine[5,1].to_i * 6
40   check = check + nine[6,1].to_i * 7
41   check = check + nine[7,1].to_i * 8
42   check = check + nine[8,1].to_i * 9
43   check = check % 11
44 
45   if check == 10
46     "#{nine}X"
47   else
48     "#{nine}#{check}"
49   end
50 end
new(str) click to toggle source
   # File lib/isbn10.rb
16 def initialize(str)
17   @number = str.to_s.gsub("-","")
18 end
valid?(isbn) click to toggle source
   # File lib/isbn10.rb
24 def self.valid?(isbn)
25   isbn = isbn.to_s.gsub("-","")
26   isbn.length == 10 && isbn.to_s.upcase == ISBN10.complete(isbn[0,9])
27 end

Public Instance Methods

grouped() click to toggle source
   # File lib/isbn10.rb
52 def grouped
53   return nil unless self.valid?
54 
55   if @number[0,1] == "0"
56     grouped_zero
57   elsif @number[0,1] == "1"
58     grouped_one
59   else
60     nil
61   end
62 end
to_ean() click to toggle source
   # File lib/isbn10.rb
64 def to_ean
65   return nil unless self.valid?
66   EAN13.complete("978#{@number[0,9]}")
67 end
valid?() click to toggle source
   # File lib/isbn10.rb
20 def valid?
21   ISBN10.valid? @number
22 end

Private Instance Methods

grouped_one() click to toggle source
    # File lib/isbn10.rb
 98 def grouped_one
 99   groups = [1]
100   buffer = @number[1,7].to_i
101 
102   if buffer < 1000000
103     groups << @number[1,2]
104     groups << @number[3,6]
105   elsif buffer >= 1000000 && buffer < 4000000
106     groups << @number[1,3]
107     groups << @number[4,5]
108   elsif buffer >= 4000000 && buffer < 5500000
109     groups << @number[1,4]
110     groups << @number[5,4]
111   elsif buffer >= 5500000 && buffer < 8698000
112     groups << @number[1,5]
113     groups << @number[6,3]
114   elsif buffer >= 8698000 && buffer < 9990000
115     groups << @number[1,6]
116     groups << @number[7,2]
117   else
118     groups << @number[1,7]
119     groups << @number[8,1]
120   end
121   groups << @number[9,1]
122   groups.join("-")
123 end
grouped_zero() click to toggle source
   # File lib/isbn10.rb
71 def grouped_zero
72   groups = [0]
73   buffer = @number[1,7].to_i
74 
75   if buffer < 2000000
76     groups << @number[1,2]
77     groups << @number[3,6]
78   elsif buffer >= 2000000 && buffer < 7000000
79     groups << @number[1,3]
80     groups << @number[4,5]
81   elsif buffer >= 7000000 && buffer < 8500000
82     groups << @number[1,4]
83     groups << @number[5,4]
84   elsif buffer >= 8500000 && buffer < 9000000
85     groups << @number[1,5]
86     groups << @number[6,3]
87   elsif buffer >= 9000000 && buffer < 9500000
88     groups << @number[1,6]
89     groups << @number[7,2]
90   else
91     groups << @number[1,7]
92     groups << @number[8,1]
93   end
94   groups << @number[9,1]
95   groups.join("-")
96 end