From Wikipedia, the free encyclopedia - View original article
The CUSIP distribution system is owned by the American Bankers Association, and is operated by Standard & Poor's. The CUSIP Service Bureau acts as the National numbering agency (NNA) for North America, and the CUSIP serves as the National Securities Identification Number for products issued from both the United States and Canada.
The acronym CUSIP derives from the Committee on Uniform Security Identification Procedures, which was founded in 1964 and developed the CUSIP system. The Committee formed the CUSIP Service Bureau in 1968, during the paper crunch on Wall Street.
In the 1980s there was an attempt to expand the CUSIP code system for international securities as well. The resulting CINS (CUSIP International Numbering System) has seen little use as it was introduced at about the same time as the truly international ISIN system. CINS identifiers do appear in the ISIDPlus directory, however.
In November 2009, ten months after launching an investigation, the European Commission formally charged Standard & Poor’s with abusing its position as the sole provider of CUSIP international securities identification codes for U.S. securities by requiring European financial firms and data vendors to pay licensing fees for their use. “This behavior amounts to unfair pricing,” the European Commission said in its statement of objections which lays the groundwork for an adverse finding against S&P. “The (numbers) are indispensable for a number of operations that financial institutions carry out – for instance, reporting to authorities or clearing and settlement – and cannot be substituted.”
S&P has run the CUSIP Service Bureau, the only ISIN issuer in the US, on behalf of the American Bankers Association. In its formal statement of objections, the European Commission alleges that S&P is abusing this monopoly position by forcing financial services companies and information service providers to pay licence fees for the use of US ISINs. It claims that comparable agencies elsewhere in the world either do not charge fees at all, or do so on the basis of distribution cost, rather than usage.
The first six characters are known as the base (or CUSIP-6), and uniquely identify the issuer. Issuer codes are assigned alphabetically from a series that includes deliberate built-in "gaps" for future expansion. The 7th and 8th digit identify the exact issue. The 9th digit is an automatically generated checksum (some clearing bodies ignore or truncate the last digit). The last three characters of the issuer code can be letters, in order to provide more room for expansion.
Issuer numbers 990 to 999 and 99A to 99Z in each group of 1,000 numbers are reserved for internal use. This permits a user to assign an issuer number to any issuer which might be relevant to his holdings but which does not qualify for coverage under the CUSIP numbering system. Other issuer numbers (990000 to 999999 and 99000A to 99999Z) are also reserved for the user so that they may be assigned to non-security assets or to number miscellaneous internal assets.
The 7th and 8th digit identify the exact issue, the format being dependent on the type of security. In general, numbers are used for equities and letters are used for fixed income. For commercial paper the first issue character is generated by taking the letter code of the maturity month, the second issue character is the day of the maturity date, with letters used for numbers over 9. The first security issued by any particular issuer is numbered "10". Newer issues are numbered by adding ten to the last used number up to 80, at which point the next issue is "88" and then goes down by tens. The issue number "01" is used to label all options on equities from that issuer.
Fixed income issues are labeled using a similar fashion, but due to there being so many of them they use letters instead of digits. The first issue is labeled "AA", the next "A2", then "2A" and onto "A3". To avoid confusion, the letters I and O are not used since they might be mistaken for the digits 1 and 0.
The 9th digit is an automatically generated check digit using the "Modulus 10 Double Add Double" technique. To calculate the check digit every second digit is multiplied by two. Letters are converted to numbers based on their ordinal position in the alphabet.
algorithm Cusip-Check-Digit(cusip) is Input: an 8-character CUSIP Output: the check digit for that CUSIP sum := 0 for 1 ≤ i ≤ 8 do c := the ith character of cusip if c is a digit then v := numeric value of the digit c else if c is a letter then p := ordinal position of c in the alphabet (A=1, B=2...) v := p + 9 else if c = "*" then v := 36 else if c = "@" then v := 37 else if c = "#" then v := 38 end if if i is even then v := v × 2 end if sum := sum + v div 10 + v mod 10 repeat return (10 - (sum mod 10)) mod 10 end function
Public Function CUSIP(ByVal CUSIPCode As String) As Integer Dim sumof As Integer Dim s As String Dim v as Integer If Len(CUSIPCode) <> 8 Then Exit Function For i = 1 To 8 s = Mid(CUSIPCode, i, 1) If s >= "0" And s <= "9" Then v = CInt(s) ElseIf s >= "A" And s <= "Z" Then v = CInt(Asc(s) - 55) ElseIf s = "*" Then v = 36 ElseIf s = "@" Then v = 37 ElseIf s = "#" Then v = 38 End If If i Mod 2 = 0 Then v = v * 2 End If sumof = sumof + WorksheetFunction.Quotient(v, 10) + (v Mod 10) Next i CUSIP = (10 - (sumof Mod 10)) Mod 10 End Function
import string import math def CheckCusip ( CUSIP ): "Checks whether a CUSIP is valid. Returns True/False" if len(CUSIP) != 9: return False sumof = 0 for i in range(1,9): c = CUSIP[i-1] if str.isdigit(c): v = int(c) elif str.isalpha(c): p = ord(str.lower(c)) - 96 v = p + 9 elif c == "*": v = 36 elif c == "@": v = 37 elif c == "#": v = 38 if i%2 == 0: v = v * 2 sumof = sumof + sum(divmod(v,10)) checkdigit = (10 - (sumof % 10)) % 10 return checkdigit == int(CUSIP)