Guide · Reference · Financial Data

Financial Instrument Identifiers Explained

ISIN, CUSIP, SEDOL, LEI, FIGI — every financial system uses a different set of codes. This guide explains what each identifier is, how it is structured, who issues it, and how they all relate to each other.

1. Quick reference — all identifiers at a glance

IDLengthIssued byScopeCheck digit
ISIN12National numbering agenciesGlobalLuhn (alphanumeric expansion)
CUSIP9CUSIP Global Services (FactSet/ABA)US & CanadaModified Luhn
SEDOL7LSEGUK, Ireland & globalWeighted mod-10 [1,3,1,7,3,9]
LEI20GLEIF (LOUs)Global (legal entities)MOD-97-10 (ISO 7064)
FIGI12Bloomberg / OpenFIGIGlobal (per listing)None (opaque string)
WKN6WM DatenserviceGermanyNone
VALORvariableSIX FinancialSwitzerlandNone
ℹ️ISIN, CUSIP, and SEDOL all identify instruments. LEI identifies theissuing legal entity. FIGI identifies a specific listingon a specific exchange. These are complementary, not interchangeable.

2. ISIN — the global standard

The International Securities Identification Number (ISO 6166) is the closest thing to a universal security identifier. It is accepted by regulators, exchanges, and clearing systems worldwide.

US0378331005country (2) + NSIN (9) + check (1)
  • Format: 2-letter ISO country code + 9-character NSIN + 1 check digit
  • Check digit: Luhn algorithm applied to the digit string obtained by expanding each letter A–Z to its two-digit value (A=10, B=11, … Z=35)
  • Issued by: National Numbering Agencies (NNAs) — CUSIP Global Services for US, London Stock Exchange for GB, Deutsche Börse for DE, etc.
  • Used in: MiFID II reporting, EMIR, T2S settlement, FCA filings, SEC reporting

The NSIN (National Securities Identifying Number) is country-specific. For US securities it is the CUSIP. For UK securities it is 00 + SEDOL. For German securities it is the WKN padded to 9 characters.

ISINSecurityNSIN embedded
US0378331005Apple Inc.037833100 (CUSIP)
GB0007980591BP PLC007980591 (00 + SEDOL 0798059)
DE0005140008Deutsche Bank AG000514000 (WKN 514000)

API: ISIN validation → · Node.js guide →


3. CUSIP — North America

The Committee on Uniform Security Identification Procedures number is the dominant identifier for securities traded in the United States and Canada. Introduced in 1968, it underpins settlement at DTC, clearing at NSCC, and regulatory reporting at the SEC.

037833100issuer (6) + issue (2) + check (1)
  • Format: 6-char issuer number + 2-char issue number + 1 check digit
  • Characters: Digits 0–9, letters A–Z, and special chars * @ #
  • Check digit: Modified Luhn — same doubling/digit-sum approach as standard Luhn, but with A=10…Z=35, *=36, @=37, #=38
  • Issued by: CUSIP Global Services (FactSet, licensed from ABA)
  • Used in: DTC settlement, SEC Form 13F, TRACE fixed-income reporting, NSCC clearing
ℹ️The US ISIN is mechanically derived from the CUSIP: US + CUSIP (9 chars) + Luhn check digit. This is why the ISIN validator returns a cusip field for US and CA ISINs.

API: CUSIP validation → · Node.js guide → · Python guide →


4. SEDOL — United Kingdom & Ireland

The Stock Exchange Daily Official List code is assigned by LSEG (London Stock Exchange Group). It is the primary identifier for UK and Irish securities, used in CREST settlement and FCA transaction reporting. Despite its UK origins, the SEDOL Masterfile covers over 100 million instruments globally.

0798059base code (6) + check (1)
  • Format: 6 alphanumeric characters + 1 check digit
  • Characters: Digits 0–9 and letters. Modern SEDOLs (post-2004) exclude vowels A, E, I, O, U to reduce ambiguity
  • Check digit: Weighted sum with weights [1,3,1,7,3,9], modulo 10. Character values: 0–9=0–9, A–Z=10–35
  • Issued by: LSEG (London Stock Exchange Group)
  • Used in: CREST settlement, FCA MiFIR reporting, UK investment manager data feeds

Unlike ISIN and CUSIP, a SEDOL identifies a specific listing on a specific market — the same company may have multiple SEDOLs for different share classes or exchange venues.

API: SEDOL validation → · Node.js guide → · Python guide →


5. LEI — identifying the issuer, not the instrument

The Legal Entity Identifier (ISO 17442) is fundamentally different from the other identifiers in this guide — it identifies the legal entity that issues or trades securities, not the security itself. Created after the 2008 financial crisis to improve systemic risk monitoring, it is now mandated for OTC derivatives reporting, MiFID II, and EMIR.

HWUPKR0MPOU8FGXBT394entity code (18) + check (2)
  • Format: 4-char LOU prefix + 14-char entity code + 2 check digits (20 chars total)
  • Check digit: MOD-97-10 (ISO 7064) — same algorithm as IBAN
  • Issued by: GLEIF-accredited Local Operating Units (LOUs)
  • Used in: EMIR OTC derivatives reporting, MiFID II, SFTR, bank counterparty identification
  • Public database: GLEIF publishes a free, downloadable, full LEI dataset updated daily
The ISIN validator returns an issuerLei field (from FIRDS) linking the instrument to its issuing entity. This lets you chain ISIN → LEI → full entity details in a single pipeline.

API: LEI validation →


6. FIGI — Bloomberg's open identifier

The Financial Instrument Global Identifier was developed by Bloomberg and made publicly available in 2013 as an open standard under the Object Management Group. Unlike ISIN and SEDOL, FIGI is exchange-specific — each listing on each exchange gets its own FIGI.

BBG000B9XRY412-character alphanumeric opaque string
  • Format: 12-character alphanumeric string — no embedded structure or check digit
  • Types: FIGI (per listing), Composite FIGI (across all listings of the same instrument), Share Class FIGI
  • Issued by: Bloomberg (via OpenFIGI API — free with registration)
  • Used in: Bloomberg Terminal, buy-side data infrastructure, cross-reference databases

The OpenFIGI API accepts ISIN, CUSIP, SEDOL, and other identifiers as input and returns the corresponding FIGI. This is how isvalid enriches ISIN, CUSIP, and SEDOL responses with live instrument data.


7. Other identifiers: WKN, VALOR, RIC, Bloomberg ticker

IDFull nameCountryNotes
WKNWertpapierkennnummerGermany6-char alphanumeric, embedded in German ISINs (DE…)
VALORValorennummerSwitzerlandNumeric, assigned by SIX Financial, embedded in CH ISINs
RICReuters Instrument CodeGlobalProprietary Refinitiv/LSEG code, ticker + exchange suffix (e.g. VOD.L)
TickerExchange tickerGlobalNot unique globally — AAPL on NASDAQ differs from AAPL on another exchange
⚠️Tickers and RICs are not stable identifiers. They change with company renames, exchange migrations, and data vendor reassignments. Use ISIN or FIGI as the canonical key in any database that needs to survive corporate actions.

8. How identifiers relate to each other

The identifiers are not independent — several are mathematically derived from each other:

CUSIP → US/CA ISIN

US ISIN = "US" + CUSIP (9) + Luhn_check_digit("US" + CUSIP)

Example: CUSIP 037833100 → ISIN US0378331005

SEDOL → GB ISIN

GB ISIN = "GB00" + SEDOL (7) + Luhn_check_digit("GB00" + SEDOL)

Example: SEDOL 0798059 → ISIN GB0007980591

ISIN → LEI (via issuer field)

FIRDS (ESMA's MiFID II reference database) links each ISIN to the issuer's LEI. This relationship is not mathematical — it comes from regulatory reporting data.

ISIN / CUSIP / SEDOL → FIGI

OpenFIGI maps any of these identifiers to FIGI via its free mapping API. There is no deterministic formula — the mapping is maintained by Bloomberg.

// Deriving a US ISIN from a CUSIP (JavaScript)
function cusipToUsIsin(cusip) {
  const prefix = 'US' + cusip; // "US" + 9 chars = 11 chars
  return prefix + luhnCheckDigit(expandToDigits(prefix));
}

// Deriving a GB ISIN from a SEDOL
function sedolToGbIsin(sedol) {
  const prefix = 'GB00' + sedol; // "GB00" + 7 chars = 11 chars
  return prefix + luhnCheckDigit(expandToDigits(prefix));
}

// Both use the same Luhn expansion (A→10, B→11, …, Z→35)
function expandToDigits(s) {
  return [...s].map(ch =>
    ch >= 'A' && ch <= 'Z' ? String(ch.charCodeAt(0) - 55) : ch
  ).join('');
}

9. Which identifier should you use?

Use ISIN when…

You need a single global identifier that works across markets. ISIN is mandatory for EU regulatory reporting (MiFID II, EMIR, SFTR) and widely accepted for cross-border settlement. It is the best choice for a canonical key in a securities master database.

Use CUSIP when…

You are working with US or Canadian securities and interfacing with US settlement systems (DTC, NSCC), US regulatory filings (SEC 13F, TRACE), or prime broker infrastructure. CUSIP is the native key for US fixed-income and equity markets.

Use SEDOL when…

You are working with UK or Irish securities, interfacing with CREST settlement, FCA transaction reporting, or a UK-based data vendor. SEDOL is the native key for the London Stock Exchange ecosystem.

Use LEI when…

You need to identify a counterparty or issuer rather than a security. LEI is mandatory for OTC derivatives reporting and is increasingly used in KYC/AML workflows for institutional clients.

Use FIGI when…

You need to disambiguate between listings of the same security on different exchanges, or when building a cross-reference layer that maps from ISIN/CUSIP/SEDOL to a consistent internal key. FIGI is free and open, making it attractive for data infrastructure that does not have Bloomberg Terminal access.


10. Validating identifiers via API

The IsValid API provides dedicated endpoints for each identifier. A single call handles format validation, check digit verification, and live instrument enrichment from ESMA FIRDS and OpenFIGI.

IdentifierEndpointEnrichment
ISIN/v0/isinFIRDS + OpenFIGI
CUSIP/v0/cusipFIRDS (via US ISIN) + OpenFIGI
SEDOL/v0/sedolOpenFIGI
LEI/v0/leiGLEIF database
CFI/v0/cfiISO 10962 classification
// Validate an ISIN and get full instrument details
const res = await fetch('https://api.isvalid.dev/v0/isin?value=GB0007980591', {
  headers: { Authorization: 'Bearer YOUR_API_KEY' },
});
const data = await res.json();
// {
//   valid: true,
//   countryCode: 'GB',
//   nsin: '007980591',
//   found: true,
//   name: 'BP PLC',
//   issuerLei: 'ZZFHHZLM2EP5ZJSUDL95', // → use /v0/lei to get entity details
//   cfiCode: 'ESVUFR',
//   currency: 'GBP',
//   figi: 'BBG000BT4FC2',
//   ...
// }

See also: Check digit algorithms explained · ISIN API docs · CUSIP API docs · SEDOL API docs · LEI API docs