2013-06-14 5 views
8

Ich habe versucht, ISBN10-Codes mit Java zu ISBN13-Nummern zu konvertieren. Von . Auf isbn-13.info habe ich den Weg gefunden, sie zu konvertieren.Konvertieren von ISBN10 zu ISBN13

Beispiel: 0-123456-47-9

  • Beginne mit Präfix „978“
  • Mit den ersten neun Ziffern der ISBN (umfassen Striche) 978-0-123456- 47-
  • Berechnen Sie die EAN Prüfziffer die „Mod 10 Algorithm“ 978-0-123456-47-2

mit Hilfe dieser ich mit habe ein Java-Programm erstellt, um die Konvertierung durchzuführen.

public class ISBNConverter { 
    public static void main(String[] args) { 
     String isbn10 = "9513218589"; 
     String isbn13 = ""; 
     int sum = 0; 
     int checkNumber = 0; 
     int multiplier = 2; 

     String code = "978" + isbn10.substring(0, isbn10.length() - 1); 

     for(int i = code.length() - 1; i >= 0; i--) { 
      int num = Character.getNumericValue(code.charAt(i)); 
      isbn13 += String.valueOf(num * multiplier); 

      multiplier = (multiplier == 2) ? 1 : 2; 
     } 

     for(int i = 0; i < isbn13.length(); i++) { 
      sum += Character.getNumericValue(isbn13.charAt(i)); 
     } 

     while(sum % 10 != 0) { 
      sum++; 
      checkNumber++; 
     } 

     System.out.println(checkNumber); 
    } 
} 

Für das Beispiel ISBN10 Code 9513218589 (978951321858 ISBN13 ohne Prüfziffer) es gibt 5 als Schecknummer. Wenn ich es mit dem Konverter auf ISBN's official site errechne, bekomme ich 4 als Prüfsumme. Aus irgendeinem Grund ist die Summe der Zahlen im neuen Code um eins niedriger als es sein sollte.

Ich habe lange damit zu kämpfen und ich glaube, ich habe blind begonnen: Ich kann einfach nicht finden, was ich falsch mache. Könnte jemand dabei helfen?

+3

Sie könnten versuchen, eine Methode zur Berechnung der EAN-Prüfziffer zu implementieren und es zu testen – fge

+0

Danke. Sie sollten dies als Antwort posten, da dies der richtige Weg ist. – MikkoP

+0

Uhm gut, das war nur ein Ratschlag ... – fge

Antwort

3

Im

for (int i = 0; i < isbn13.length(); i ++) { sum + = Character.getNumericValue (isbn13.charAt (i)); }

Sie addieren alle Ziffern aus der ISBN, einschließlich der doppelten.

Beispiel:

Ziffer 7 -> double = 14

Sie sind 14 der Summe addieren. Ist sollte

sein

Ziffer 7 -> doppelt = 14 -> größer als 9? ja, so 1 + 4 = 5

und Sie sollten hinzufügen 5.

+0

Danke für deine Antwort! – MikkoP

4

Hier können Sie

public static String ISBN10toISBN13(String ISBN10) { 
    String ISBN13 = ISBN10; 
    ISBN13 = "978" + ISBN13.substring(0,9); 
    //if (LOG_D) Log.d(TAG, "ISBN13 without sum" + ISBN13); 
    int d; 

    int sum = 0; 
    for (int i = 0; i < ISBN13.length(); i++) { 
     d = ((i % 2 == 0) ? 1 : 3); 
     sum += ((((int) ISBN13.charAt(i)) - 48) * d); 
     //if (LOG_D) Log.d(TAG, "adding " + ISBN13.charAt(i) + "x" + d + "=" + ((((int) ISBN13.charAt(i)) - 48) * d)); 
    } 
    sum = 10 - (sum % 10); 
    ISBN13 += sum; 

    return ISBN13; 
} 

pardon die Log-Linien dazwischen gehen, ich bin Kopie einfügen es von einem Android-Projekt ich bin Arbeiten an