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

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