none
ISBN Prüfziffer Berechnung RRS feed

  • Frage

  • Hallo,

    ich versuche die Prüfziffer der ISBN zu berechnen und komme an der Stelle nicht weiter, bei der das Programm
    die einzelnen Stellen der ISBN einliest. Ich möchte die gesamte 9 stellige ISBN eingeben und das Programm soll sich jede  eingebene Zahl einzeln aus dem Array herausnehmen und berechnen.
    z.B.
    PZ = ((0 * 1) + (1 * 2) + (2 * 3) + (3 * 4) + (4 * 5) + (5 * 6) + (6 * 7) + (7 * 8) + (8 * 9))%11

    Wie kriegt man das einzelne Einlesen der Zahlen hin bei einer Hintereinandereingabe?

    DANKE 
    Dienstag, 11. August 2009 19:14

Antworten

  • Hallo,

    Du solltest zunächst die gesamte Zeichenkette einlesen.
    Bei einer Konsolenanwendung via Console.ReadLine
    bzw. bei Windows Forms eine Textbox zur Eingabe verwenden.

    Da die "Prüfziffer" bei einer ISBN-10 auch ein "X" sein kann, sollte man als Rückgabe mit char arbeiten.
     internal static void TestIsbnCheckDigit()
            {
                // lt http://www.arndt-bruenner.de/mathe/scripts/pruefziffern.htm
                string[] isbns = new string[]
                {
                     "3-499-13599-X",
                     "3-446-19313-8",
                     "0-7475-5100-6",
                     "1-57231-422-2",
                     
                     "349913599X", // ohne Trennzeichen
                     "1-234-56789-0" // Ist ungültig
                };
    
                foreach (string isbn in isbns)
                {
                    char checkDigit = GetIsbnCheckDigit(isbn, true);
                    Console.WriteLine("ISBN {0} => {1} ({2})", 
                        isbn, checkDigit,
                        IsIsbnValid(isbn) ? "GÜLTIG" : "UNGÜLTIG");
                }
            }
    
            /// <summary>
            /// Prüfziffer für ISBN (10stellig) mit Trennzeichen (-)
            /// </summary>
            public static char GetIsbnCheckDigit(string isbn, bool checkIncluded)
            {
                if (isbn == null)
                    throw new ArgumentNullException("isbn");
    
                int length = isbn.Length;
                // letztes Zeichen ist die Prüfziffer
                if (checkIncluded)
                    length--;
                int sum = 0;
                int factor = 1;
                for (int index = 0; index < length; index++)
                {
                    char ch = isbn[index];
                    if (ch == '-')
                        continue;
                    else if (ch >= '0' && ch <= '9')
                    {
                        sum += ((ch - '0') * factor);
                        factor++;
                    }
                    else
                        throw new FormatException("Ungültiges Zeichen in ISBN.");
                }
    
                sum %= 11;
                return (sum == 10) ? 'X' : (char)(sum + '0');
            }
    
            public static bool IsIsbnValid(string isbn)
            {
                char checkDigit = GetIsbnCheckDigit(isbn, true);
                return (checkDigit == isbn[isbn.Length - 1]);
            }
    Beachte dass auf ISBN-13 umgestellt wurde, wobei die Berechnung entsprechend einer EAN erfolgt:
    http://de.wikipedia.org/wiki/Internationale_Standardbuchnummer

    Gruß Elmar
    • Als Antwort markiert ISBNoob Donnerstag, 13. August 2009 19:09
    Mittwoch, 12. August 2009 09:09