- ISO 6166
-
Die International Securities Identification Number (ISIN) ist eine zwölfstellige Buchstaben-Zahlen-Kombination und stellt eine Identifikation für ein Wertpapier dar, das an der Börse gehandelt wird. Der Aufbau der ISIN wird in der ISO 6166 beschrieben.
Inhaltsverzeichnis
Hintergründe
Im Zuge der internationalen Harmonisierung der Finanzmärkte wurde im Januar 2000 die Entscheidung getroffen, auch in Deutschland den ISIN-Standard verbindlich einzuführen[1].
Gehandelte Wertpapiere, die mit einer ISIN versehen werden, können Aktien, Fonds, Schuldverschreibungen (bzw. Anleihe), Optionen oder Futures sein. Nur fungible Wertpapiere bekommen eine ISIN. Nicht alle an der Börse gehandelte Produkte bekommen eine ISIN, z. B. werden für Warentermingeschäfte andere Produkt-Identifikationen verwendet.
Die ISIN identifiziert ein Wertpapier eindeutig, aber nicht den Handel mit einem Wertpapier. Zum Beispiel wird Bayer AG (ISIN DE0005752000) an fünfzehn verschiedenen Börsenplätzen (elektronischer Handel und Parketthandel) in vier verschiedenen Währungen gehandelt. Durch Kombination von Market Identifier Code (MIC) gemäß ISO 10383 und ISIN wird diese Handelseindeutigkeit aber erreicht.
Die ISINs werden nach und nach weltweit eingeführt. Zur Zeit haben sie viele Staaten als eine weitere Möglichkeit zur Identifikation von Wertpapieren eingeführt. Nur wenige dieser Staaten haben sie bisher zur vorrangigen Identifikation erklärt. In Deutschland ist die Herausgebergemeinschaft Wertpapier-Mitteilungen, Keppler, Lehmann GmbH & Co. KG offiziell für die Vergabe der ISINs zuständig.
Die Prüfung des ISO 6166-Standards wird von der Association of National Numbering Agencies (ANNA) durchgeführt. Sie ist der Zusammenschluss aller nationalen Behörden für die Vergabe von Wertpapierkennnummern.
Aufbau der ISIN
Aufbau der ISIN 1 2 3 4 5 6 7 8 9 10 11 12 Länder-
codeNSIN Prüf-
zifferDer Aufbau der ISIN ist so ISO 6166 festgelegt: zwei Buchstaben als Ländercode, die neunstellige alphanumerische NSIN (National Securities Identifying Number) und eine Prüfziffer. Der Ländercode ist der ALPHA-2-Code der ISO 3166-1 des Landes, das die ISIN für ein Wertpapier herausgegeben hat. Dieses kann sich durchaus vom Heimatland des Wertpapieremittenten unterscheiden. Eine Besonderheit stellt das länderunabhängige Kürzel "XS" dar, welches für internationale Wertpapiere genutzt wird, die bei Clearstream oder Euroclear verwahrt werden.
Die ISIN wird von der jeweiligen nationalen Organisation herausgegeben (National numbering agency, NNA). Im deutschen Börsenhandel wurden Wertpapiere bisher über eine sechsstellige WKN (Wertpapierkennnummer) klassifiziert. Diese wurde am 22. April 2003 durch die ISIN ersetzt, was jedoch nicht bedeutet, dass die WKN damit abgeschafft wurde. Die WKN wird parallel zur ISIN immer noch von vielen Systemen zur Identifizierung der in Deutschland emittierten Wertpapiere verwendet.
- Deutsche ISINs beginnen mit dem Länderkürzel DE. Die folgende NSIN setzt sich aus neun Nummern oder Zahlen zusammen. Dabei wurden bei der Einführung der ISIN-Codes aus allen (bis dahin nur numerisch existierenden) WKNs automatisch eine ISIN mit drei Nullen gefolgt von der bisherigen WKN generiert. Mit der abschließenden Prüfziffer ergibt sich z. B. für die Bayer AG (WKN 575200) die ISIN DE0005752000. Die mittlerweile[2] auch in alpha-numerischer Form bestehenden WKNs sind jedoch aus heutigen ISIN-Codes nicht unbedingt herleitbar.
- In Österreich beginnen die ISINs mit den Länderkürzel AT gefolgt von derzeit noch vier Nullen dann der eindeutigen Wertpapiernummer und abschließend der Prüfziffer.
Prüfziffer berechnen
für DE0005752000ISIN
ohne
PrüfzifferFaktor Produkt Ziffern
für
QuersummeD 1 2 2 2 3 1 3 3 E 1 2 2 2 4 1 4 4 0 2 0 0 0 1 0 0 0 2 0 0 5 1 5 5 7 2 14 1 + 4 5 1 5 5 2 2 4 4 0 1 0 0 0 2 0 0 Quersumme: 30 (10-(Quersumme mod 10)) mod 10 0 Die Prüfziffer wird mittels der sogenannten Double-Add-Double-Methode berechnet, die auf die ersten elf Zeichen der ISIN – ohne die ja noch zu berechnende Prüfziffer – angewendet wird:
- Alle Buchstaben werden durch Zahlen ersetzt. Dafür wird die Position des Buchstaben im Alphabet um neun erhöht, z. B. A = 10, B = 11, .., Z = 35. Alle Ziffern bleiben unverändert.
- Jede zweite Ziffer wird mit zwei multipliziert. Begonnen wird mit der letzten Ziffer (vor der Prüfziffer!).
- Von dieser Ziffernfolge wird die Quersumme gebildet. Da vorher jede zweite Ziffer verdoppelt wurde (siehe Punkt 2) ergibt sich daraus die Bezeichnung Double-Add-Double.
- Die Prüfziffer ergibt sich aus der Differenz zum nächst größeren Vielfachen von 10. Oder: (10 - (Quersumme mod 10)) mod 10 = Prüfziffer
Die Verifikation einer vollständigen ISIN kann durch die Neuberechnung der Prüfziffer und den Vergleich mit der vorhandenen erfolgen. Oft wird jedoch die vorhandene Prüfziffer einfach durch Addition zur restlichen Quersumme in den Algorithmus einbezogen. Da sie als Differenz der Quersumme zum nächstgrößeren Vielfachen von 10 berechnet wurde, muss eine korrekte Prüfziffer die Quersumme genau zu einem Vielfachen von 10 ergänzen und somit das Ergebnis 0 erzeugen. Jedes andere Resultat zeigt bei der Verifikation einen Fehler an.
Beispiele
Bayer AG: ISIN DE0005752000, WKN 575200
Treasury Corporation of Victoria, 5 3/4%, 2005-2016: ISIN AU0000XVGZA3
Double-Add-Double: Implementierung
Zeichenkettenverarbeitung ist auf Rechnern meist sehr viel teurer als Ganzzahlarithmetik. Eine effiziente Implementierung der Double-Add-Double-Methode sollte insbesondere eine explizite Expansion der Buchstaben zu zweistelligen Dezimalzahlen und ein symbolisches Rechnen vermeiden. Der zu unterhaltene Zustand sollte minimal sein und sich auf möglichst einfache Datentypen beschränken. Die folgende Java-Implementierung versucht, diesen Grundsätzen zu folgen:
/** * Berechnet die Double-Add-Double-Prüfziffer der Zeichenkette src (Länge = 11) * bzw. prüft deren Gültigkeit (Länge = 12, Ergebnis 0 wenn die Prüfziffer korrekt ist, * ansonsten undefiniert). */ /* 00 */ public static int dad(String src) { /* 01 */ int s = 0; /* 02 */ int a = (src.length() == 12)? 1 : 2; /* 03 */ for(int i = src.length() - 1; i >= 0; i--) { /* 04 */ int c = src.charAt(i); /* 05 */ if(c > '9') { /* 06 */ // Es ist ein Buchstabe /* 07 */ c -= ('A' - 10); /* 08 */ s += (3-a)*(c/10) + a*c + (a-1)*(c%10)/5; /* 09 */ } /* 10 */ else { /* 11 */ // Es ist eine Ziffer /* 12 */ c -= '0'; /* 13 */ s += a*c + (a-1)*(c/5); /* 14 */ a = 3 - a; /* 15 */ } /* 16 */ } /* 17 */ s %= 10; /* 18 */ return (10 - s%10) % 10; /* 19 */ }
Der implementierte Algorithmus nutzt aus, dass für das Ergebnis lediglich die Restklasse modulo 10, d. h. die Einerstelle, der berechneten Quersumme von Interesse ist. Rechnerische Abweichungen ab der Zehnerstelle sind irrelevant, solange keine Zahlenbereichsüberläufe riskiert werden.
Die Verarbeitung der ISIN (mit oder ohne Prüfziffer) erfolgt von hinten. Die Ersetzung der Buchstaben durch zwei Ziffern, die Verdopplung jeder zweiten Ziffer und die Quersummenbildung werden nicht als Einzelschritte ausgeführt. Die Arbeit mit Zeichenketten ist so auf das bloße Durchlaufen der gegebenen ISIN beschränkt. Der zusätzlich unterhaltene Zustand beschränkt sich auf die bisher akkumulierte Quersumme s und den für das nächste Zeichen anzuwendenden Koeffizienten a, 1 oder 2.
Der Koeffizient a wird in Zeile 02 initialisiert: zu 1, wenn eine Prüfziffer vorhanden ist, die gegebene ISIN also 12 Stellen hat, ansonsten zu 2. Bei der Verifikation wird die vorhandene Prüfziffer also einfach zur Quersumme addiert und dann die vorhergehende Stelle nach Vorschrift verdoppelt. Wird beim Durchlaufen der ISIN eine der Ziffern 0 bis 9 verarbeitet, wird durch Zeile 14 zwischen einfacher und doppelter Wichtung umgeschaltet. Die Verarbeitung eines Buchstaben umfasst ja eigentlich zwei Ziffern, so dass ein Hin- und Herschalten des Koeffizienten hier unterbleiben kann.
Der Beitrag jedes Zeichens zur Quersumme wird auf s aufsummiert und für Ziffern und Buchstaben getrennt bestimmt.
Der Zahlenwert eines Ziffernzeichens '0' bis '9' wird in Zeile 12 durch Abzug des Offsets der Zeichenkodierung ermittelt. a*c ergibt das in die Quersumme einzubeziende Produkt. Der Term (a-1)*(c/5) berücksichtigt, dass ggf. auch dessen Zehnerstelle (bei: a == 2 && c >= 5) als eigenständiger Summand in die Quersumme aufzunehmen ist. Ihr Auftreten in a*c als voller Zehner ist, wie oben gesagt, irrelevant.
Analog dazu berechnet Zeile 07 den expandierten zweistelligen Zahlenwert eines Buchstaben. Dessen Einerstelle wird durch die Summe a*c + (a-1)*(c%10)/5 genau wie eine reguläre Ziffer in die Quersumme einbezogen. Seine Zehnerstelle wird durch den Term (3-a)*(c/10) mit dem anderen Koeffizienten aufgenommen. Da die Zehnerstelle keinen Wert größer als 3 annimmt, entsteht hier auch bei potentieller Dopplung keine in die Quersumme einzubeziehende Zehnerstelle des Produktes.
Einzelnachweise
Weblinks
Wikimedia Foundation.