class Faker::Code

Public Class Methods

isbn(base = 10) click to toggle source

By default generates 10 sign isbn code in format 123456789-X You can pass 13 to generate new 13 sign code

# File lib/faker/code.rb, line 6
def isbn(base = 10)
  base == 13 ? generate_base13_isbn : generate_base10_isbn
end

Private Class Methods

generate_base10_isbn() click to toggle source
# File lib/faker/code.rb, line 12
def generate_base10_isbn
  values = regexify(/\d{9}/)
  remainder = sum(values) { |value, index| (index + 1) * value.to_i } % 11
  values << "-#{remainder == 10 ? 'X' : remainder}"
end
generate_base13_isbn() click to toggle source
# File lib/faker/code.rb, line 18
def generate_base13_isbn
  values = regexify(/\d{12}/)
  remainder = sum(values) { |value, index| index.even? ? value.to_i : value.to_i * 3 } % 10
  values << "-#{((10 - remainder) % 10)}"
end
sum(values, &block) click to toggle source
# File lib/faker/code.rb, line 24
def sum(values, &block)
  values.split(//).each_with_index.inject(0) do |sum, (value, index)|
    sum + block.call(value, index)
  end
end