class IsinValidator
Constants
- REGEXP
rubocop:disable Layout/LineLength
Private Instance Methods
valid_attr?()
click to toggle source
rubocop:enable Layout/LineLength
# File lib/lite/validators/isin_validator.rb, line 11 def valid_attr? valid_regexp? && valid_checksum? end
valid_checksum?()
click to toggle source
rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
# File lib/lite/validators/isin_validator.rb, line 16 def valid_checksum? characters = value.chars digits = characters.map { |chr| /[A-Z]/.match?(chr) ? (chr.ord - 55) : chr.to_i } even_values = digits.values_at(*digits.each_index.select(&:even?)) odd_values = digits.values_at(*digits.each_index.select(&:odd?)) longest, shortest = if even_values.last == characters.map(&:to_i) [even_values, odd_values] else [odd_values, even_values] end longest = longest.map { |int| int * 2 } values = longest.concat(shortest).to_s.scan(/./).map(&:to_i) total = values.sum (10 - (total % 10)) % 10 end