2013-06-14 23 views
8

Ho provato a convertire i codici ISBN10 in numeri ISBN13 con Java. A partire dal . Su isbn-13.info ho trovato il modo di convertirli.Conversione da ISBN10 a ISBN13

Esempio: 0-123456-47-9

  • iniziano con il prefisso di “978”
  • Utilizzare i primi nove caratteri numerici della ISBN (includere trattini) 978-0-123456- 47-
  • Calcolare la cifra di controllo EAN utilizzando il “Mod 10 Algoritmo” 978-0-123456-47-2

utilizzando che ho ho creato un programma Java per fare la conversione.

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

Per l'esempio di codice ISBN10 9513218589 (978951321858 ISBN13 senza il numero di controllo) restituisce 5 come il numero di controllo. Se lo calcolo utilizzando il convertitore su ISBN's official site ottengo 4 come somma di controllo. Per qualche motivo, la somma dei numeri nel nuovo codice è uno in meno di quanto dovrebbe essere.

Ho litigato con questo per molto tempo e credo di essere diventato cieco: non riesco a trovare quello che sto sbagliando. Qualcuno potrebbe aiutare con questo?

+3

Si potrebbe provare a iniziare a implementare un metodo per calcolare la cifra di controllo EAN e testarlo – fge

+0

Grazie. Dovresti postare questa risposta come risposta perché questo è il modo corretto. – MikkoP

+0

Uhm bene, quello era solo un consiglio ... – fge

risposta

3

Nel

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

sei sommando tutti i numeri ISBN, compresi quelli raddoppiati.

Esempio:

cifre 7 -> doppia = 14

Stai salvando 14 alla somma. Dovrebbe essere

cifre 7 -> doppio = 14 -> più grande di 9? sì, così 1 + 4 = 5

e si dovrebbe aggiungere 5.

+0

Grazie per la tua risposta! – MikkoP

4

Qui si va

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

perdono le righe di log in mezzo, sto copia incollandolo da un progetto Android io sono funziona su