Für unser Technikerprojekt ist es nötig die Internationalen Wertpapierkennnummern auf Gültigkeit zu prüfen. Deshalb habe ich eine PHP und C# Implementation auf der Basis des Wikipedia Artikel angefertigt. Der Quellcode darf ohne Erlaubnis gerne weiterverwendet werden.
Die Funktion berechnet die Prüfziffer, falls man eine 11-stellige ISIN übergibt. Ist eine 12-stellige ISIN korrekt wird eine 0 zurückgegeben.
Die C# Implementation (static):
public static int ChksumIsin(string isin) { int s = 0; int a = (isin.Length == 12) ? 1 : 2; for (int i = isin.Length - 1; i >= 0; i--) { int c = isin[i]; if (c > '9') { c -= ('A' - 10); s += (3 - a) * (c / 10) + a * c + (a - 1) * (c % 10) / 5; } else { c -= '0'; s += a * c + (a - 1) * (c / 5); a = 3 - a; } } s %= 10; return (10 - s % 10) % 10; }
Die PHP Implementation:
<? function CheckIsin($isin) { $s = 0; $a = (strlen($isin) == 12) ? 1 : 2; for($i = strlen($isin) -1; $i >= 0; $i--) { $c = ord($isin[$i]); if($c > ord('9')) { $c -= (ord('A') -10 ); $s += intval(3-$a)*intval($c/10)+ $a*$c + intval($a-1)*intval(intval($c%10)/5); } else { $c -= ord('0'); $s += $a*$c+intval($a-1)*intval($c/5); $a = (3-$a); } } $s %= 10; return ((10-$s%10)%10); } ?>
for (int i = isin.Length – 1; i >= 0; i–)
Hier hat sich vermutlich ein kleiner Fehler eingeschlichen…
Wenn ich mich richtig entsinnen kann funktioniert pre-/post- dekrementiert/inkrementiert immer mit 2- (also –) oder 2+ (also ++).
Es müsste also folgendermaßen aussehen:
for (int i = isin.Length – 1; i >= 0; i–-)
Mit freundlichem Gruß
abc
Danke für den Hinweis!
Der Fehler lag am Syntax-Highlight-Plugin von WordPress. Ich habe bisher „Dean’s Code Highlighter“ benutzt. Dieser wurde jetzt durch das Google Plugin ersetzt.