class Jan::CodeBody

Public Class Methods

new(code_body) click to toggle source

@param code_body [String]

Calls superclass method
# File lib/jan/code_body.rb, line 6
def initialize(code_body)
  @code_body = code_body
  super(code_body)
end

Public Instance Methods

calculate_check_digit() click to toggle source

@return [Jan::CheckDigit]

# File lib/jan/code_body.rb, line 17
def calculate_check_digit
  # http://www.dsri.jp/jan/check_digit.html
  even_position_digits, odd_position_digits = @code_body.reverse.each_char.partition.with_index(2) {|_chr, idx| idx.even? }
  sum = even_position_digits.map{|d| Integer(d) }.sum * 3 + odd_position_digits.map{|d| Integer(d) }.sum
  digit = (10 - sum % 10).to_s[-1]
  Jan::CheckDigit.new(digit)
end
generate_code() click to toggle source

@return [Jan::Code]

# File lib/jan/code_body.rb, line 26
def generate_code
  Jan::Code.new(@code_body + calculate_check_digit)
end
valid?() click to toggle source

@return [boolean]

# File lib/jan/code_body.rb, line 12
def valid?
  @code_body.match?(/\A(\d{12}|\d{7})\z/)
end