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.