Sha256: 0e77e0f6e6eb6afec7b369b9c1963d0503af3a8309b71961f1aad29430893e4b
Contents?: true
Size: 609 Bytes
Versions: 1
Compression:
Stored size: 609 Bytes
Contents
# frozen_string_literal: true class CusipValidator < BaseValidator REGEXP = /^[0-9A-Z]{9}$/ private def valid_attr? valid_regexp? && valid_checksum? end def valid_checksum? digits = value.chars.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?)) values = odd_values.map { |int| int * 2 }.zip(even_values).flatten values = values.inject(0) { |sum, int| sum + (int / 10) + (int % 10) } ((10 - values) % 10) % 10 end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
lite-validators-1.8.0 | lib/lite/validators/cusip_validator.rb |