class SecId::CUSIP
Constants
- ID_REGEX
Attributes
cusip6[R]
issue[R]
Public Class Methods
new(cusip)
click to toggle source
# File lib/sec_id/cusip.rb, line 15 def initialize(cusip) cusip_parts = parse cusip @identifier = cusip_parts[:identifier] @cusip6 = cusip_parts[:cusip6] @issue = cusip_parts[:issue] @check_digit = cusip_parts[:check_digit]&.to_i end
Public Instance Methods
calculate_check_digit()
click to toggle source
# File lib/sec_id/cusip.rb, line 23 def calculate_check_digit return mod_10(modified_luhn_sum) if valid_format? raise InvalidFormatError, "CUSIP '#{full_number}' is invalid and check-digit cannot be calculated!" end
Private Instance Methods
id_digits()
click to toggle source
# File lib/sec_id/cusip.rb, line 43 def id_digits @id_digits ||= identifier.each_char.map(&method(:char_to_digit)) end
modified_luhn_sum()
click to toggle source
en.wikipedia.org/wiki/Luhn_algorithm
# File lib/sec_id/cusip.rb, line 32 def modified_luhn_sum sum = 0 id_digits.reverse.each_slice(2) do |even, odd| double_even = (even || 0) * 2 sum += div_10_mod_10(double_even) + div_10_mod_10(odd || 0) end sum end