Free tool

ISIN validator and check digit calculator

Paste an ISIN to check its format and Luhn check digit, or paste the first 11 characters to compute the twelfth. The tool also explains the country prefix and national code.
12 characters: 2-letter country, 9-character national code, 1 check digit. Case and spaces are ignored.
Try:

Common prefixes for funds and ETFs

The first two characters are the ISO 3166 code of the numbering agency that issued the code, which for funds is almost always the domicile.
PrefixCountryTypical use
IEIrelandHome of most UCITS ETFs (ICAVs and plcs) and many Irish-domiciled funds.
LULuxembourgLargest cross-border UCITS fund domicile (SICAVs, FCPs).
FRFranceFrench FCPs and SICAVs, including many Amundi and Carmignac funds.
DEGermanyGerman Sondervermögen and some ETFs; the WKN is a separate 6-character code.
GBUnited KingdomUK OEICs and unit trusts; the NSIN is the SEDOL.
NLNetherlandsDutch funds and some ETFs listed on Euronext Amsterdam.
CHSwitzerlandSwiss funds; the national code is the Valorennummer.
JEJerseyOften used for physically backed commodity ETCs.
USUnited StatesUS mutual funds and ETFs; the NSIN is the CUSIP. Not UCITS: no KID, different document set.
CACanadaCanadian funds and ETFs (CUSIP-based).
ATAustriaAustrian investment funds.
BEBelgiumBelgian SICAVs and funds.

Validate an ISIN in code

The same check in TypeScript, useful before spending an API request on a typo:
export function isValidIsin(raw: string): boolean {
  const isin = raw.trim().toUpperCase();
  if (!/^[A-Z]{2}[A-Z0-9]{9}\d$/.test(isin)) return false;
  const digits = [...isin].map((c) => (c >= "A" ? String(c.charCodeAt(0) - 55) : c)).join("");
  let sum = 0, double = false;
  for (let i = digits.length - 1; i >= 0; i--) {
    let d = Number(digits[i]);
    if (double) { d *= 2; if (d > 9) d -= 9; }
    sum += d; double = !double;
  }
  return sum % 10 === 0;
}
The API applies the same rule and answers 400 invalid_isin for anything that fails it, without counting the request against your quota.

Frequently asked questions

How is the ISIN check digit calculated?

Letters are converted to numbers (A=10 … Z=35), the resulting digit string is run through the Luhn algorithm from the right, and the check digit is the value that makes the total a multiple of ten. This tool performs that calculation locally in your browser.

Does a valid check digit mean the fund exists?

No. The check digit only catches typing errors. A syntactically valid ISIN may never have been issued or may belong to a share class that has since been closed. Resolving the ISIN through the API confirms whether a live fund document set exists.

Why does my ETF have several tickers but one ISIN?

Tickers identify a listing on one exchange. The same share class listed on Xetra, the London Stock Exchange and Borsa Italiana has three tickers and a single ISIN, which is why fund data APIs key on the ISIN.

Is the ISIN I type stored anywhere?

No. Validation runs entirely in your browser; this page does not send the value to a server. Only if you continue to sign up and request the fund through the API is the ISIN processed there.

Valid ISIN? Turn it into data.

One request returns key facts, holdings, risk and performance for that share class as JSON. Free plan, no card.