Class: Jan::CodeBody
- Inherits:
-
String
- Object
- String
- Jan::CodeBody
- Defined in:
- lib/jan/code_body.rb
Instance Method Summary collapse
- #calculate_check_digit ⇒ Jan::CheckDigit
- #generate_code ⇒ Jan::Code
-
#initialize(code_body) ⇒ CodeBody
constructor
A new instance of CodeBody.
- #valid? ⇒ boolean
Constructor Details
#initialize(code_body) ⇒ CodeBody
Returns a new instance of CodeBody.
6 7 8 9 |
# File 'lib/jan/code_body.rb', line 6 def initialize(code_body) @code_body = code_body super(code_body) end |
Instance Method Details
#calculate_check_digit ⇒ Jan::CheckDigit
17 18 19 20 21 22 23 |
# 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 ⇒ Jan::Code
26 27 28 |
# File 'lib/jan/code_body.rb', line 26 def generate_code Jan::Code.new(@code_body + calculate_check_digit) end |
#valid? ⇒ boolean
12 13 14 |
# File 'lib/jan/code_body.rb', line 12 def valid? @code_body.match?(/\A(\d{12}|\d{7})\z/) end |