lib/br_documents/ie/ba.rb in br_documents-0.0.11 vs lib/br_documents/ie/ba.rb in br_documents-0.0.12
- old
+ new
@@ -14,28 +14,29 @@
number.sub(/(\d{7})(\d{2})/, "\\1-\\2")
end
end
def valid_format?
- valid_8_digits_format or valid_9_digits_format
+ valid_8_digits_format || valid_9_digits_format
end
def valid_9_digits_format
- regex = /^(\d{6}\-\d{2})$|^(\d{8})$/
- regex.match(@number).present?
+ regex_mask_1 = /^(\d{7}\-\d{2})$|^(\d{9})$/
+ regex_mask_2 = /^(\d{3}\.\d{3}\.\d{3})$|^(\d{9})$/
+ regex_mask_1.match(@number).present? || regex_mask_2.match(@number).present?
end
def valid_8_digits_format
- regex = /^(\d{7}\-\d{2})$|^(\d{9})$/
+ regex = /^(\d{6}\-\d{2})$|^(\d{8})$/
regex.match(@number).present?
end
def valid_digital_check?
- @number.gsub!(/-/, "")
+ @number.gsub!(/[\.\/-]/, "")
weight1 = make_weight(total_size)
- weight2 = make_weight(total_size-1)
+ weight2 = make_weight(total_size - 1)
digital_check2 = digital_check_generator(@number, weight2)
number = "#{@number[0, body_size]}#{digital_check2}"
digital_check1 = digital_check_generator(number, weight1)
@@ -48,22 +49,35 @@
weight
end
def total_size
- @number.gsub(/-/, "").length
+ @number.gsub(/[\.\/-]/, "").length
end
def body_size
digital_check_size = 2
total_size - digital_check_size
end
def digital_check_generator(number, weight)
- if @number[0].to_i <= 5 or @number[0].to_i == 8
+ if use_digital_check_mod10
generate_digital_check_mod10(number, weight)
else
generate_digital_check(number, weight)
+ end
+ end
+
+ def use_digital_check_mod10
+ position = position_of_the_element_to_define_module
+ @number[position].to_i <= 5 || @number[position].to_i == 8
+ end
+
+ def position_of_the_element_to_define_module
+ if total_size == 8
+ 0
+ else
+ 1
end
end
def generate_digital_check_mod10(values, weights)
sum = reduce_weights(values, weights)