Modulo 10, rekursiv
Modulo 10, rekursiv ist ein Algorithmus der unter anderem zur Berechnung der Prüfziffer bei «Einzahlungsscheinen mit Referenznummer» (ESR) verwendet wird.

Haben Sie sich auch schon über die nicht sehr programmiergerechte Beschreibung in den Unterlagen der PostFinance und der Telekurs geärgert?


Hier der Algorithmus umgesetzt in C/C++

int modulo10(const char* lpszNummer)
{
    // 'lpszNummer' darf nur Ziffern zwischen 0 und 9 enthalten!

    static const int nTabelle[] = { 0, 9, 4, 6, 8, 2, 7, 1, 3, 5 };
    int nUebertrag = 0;

    while (*lpszNummer)
    {
        nUebertrag = nTabelle[(nUebertrag + *lpszNummer - '0') % 10];
        ++lpszNummer;
    }

    return (10 - nUebertrag) % 10;
}


Hier der Algorithmus umgesetzt in Visual Basic

Function Modulo10(ByVal strNummer As String) As Integer

    'strNummer darf nur Ziffern zwischen 0 und 9 enthalten!

    Dim intTabelle(0 To 9) As Integer
    Dim intÜbertrag As Integer
    Dim intIndex As Integer

    intTabelle(0) = 0: intTabelle(1) = 9
    intTabelle(2) = 4: intTabelle(3) = 6
    intTabelle(4) = 8: intTabelle(5) = 2
    intTabelle(6) = 7: intTabelle(7) = 1
    intTabelle(8) = 3: intTabelle(9) = 5

    For intIndex = 1 To Len(strNummer)
        intÜbertrag = intTabelle((intÜbertrag + Mid(strNummer, intIndex, 1)) Mod 10)
    Next

    Modulo10 = (10 - intÜbertrag) Mod 10

End Function


Hier der Algorithmus umgesetzt in C#

public static int modulo10(string nummer)
{
    // 'nummer' darf nur Ziffern zwischen 0 und 9 enthalten!

    int[] tabelle = { 0, 9, 4, 6, 8, 2, 7, 1, 3, 5 };
    int uebertrag = 0;

    foreach (char ziffer in nummer)
        uebertrag = tabelle[(uebertrag + ziffer - '0') % 10];

    return (10 - uebertrag) % 10;
}

Produkte Downloads Kontakt Home