Way back in 2013 we worked on a project that made use of various security identification codes (ISIN, CUSIP). From this project I've extracted some functionality into the Security Identifiers gem which has been on Github for a while.
Recently we were contacted by a user that could not find the gem - it turns out this was never published to Rubygems, so I thought now would be a good time to cover what this gem does.
What Does It Do?
In a nutshell this gem allows you to validate ISIN, CUSIP and SEDOL codes. You can also convert CUSIP and SEDOL codes to an ISIN.
Firstly add the gem to your Gemfile
gem 'security_identifiers', '0.1.1'
To validate a CUSIP
cusip = SecurityIdentifiers::CUSIP.new('125509BG3') cusip.valid? # => true
To convert the cusip to an ISIN
isin = cusip.to_isin # => #<SecurityIdentifiers::ISIN:0x007f991a3d4770... > isin.to_s # => US125509BG36
By default #to_isin assumes the company has a US prefix you can pass an alternative prefix to the method.
Also included in the gem are custom validators for ActiveModel. To use these:
class MyModel include ActiveModel::Validations include SecurityIdentifiers::Validations attr_accessor :isin validates :isin, isin: true def initialize(isin) self.isin = isin end end m = MyModel.new('0378331005') m.valid? # => false m.errors['isin'] # => ["is not in the correct format"] m = MyModel.new('US037833100') m.valid? # => false m.errors['isin'] # => ["does not have a valid check digit"] m = MyModel.new('US0378331005') m.valid? # => true
For further details or to submit a pull request or issue please refer to the repo on Github.