ISIN Prüfsumme berechnen

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);
} ?>

2 Comments

  1. 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

  2. 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>