2013-06-14 16 views
8

Próbowałem konwertować kody ISBN10 na numery ISBN13 w Javie. Od . Na isbn-13.info znalazłem sposób na ich konwersję.Konwersja ISBN10 na ISBN13

przykład: 0-123456-47-9

  • rozpoczęciem z przedrostkiem „978”
  • użytkowania pierwszymi dziewięć postaci numerycznej (ISBN obejmują kreski) 978-0-123456- 47-
  • Obliczanie cyfry kontrolnej EAN używając algorytmu „mod 10” 978-0-123456-47-2

Korzystanie że ja stworzyłem program Java do przeprowadzenia konwersji.

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

Dla przykładowego kodu ISBN10 9513218589 (978951321858 ISBN13 bez numeru Check) to zwraca 5 jako numer czeku. Jeśli obliczę to za pomocą konwertera na ISBN's official site, otrzymam 4 jako sumę kontrolną. Z jakiegoś powodu suma liczb w nowym kodzie jest mniejsza niż powinna być.

Walczę z tym od dawna i wydaje mi się, że zacząłem ślepić: po prostu nie mogę znaleźć tego, co robię źle. Czy ktoś mógłby w tym pomóc?

+3

Możesz spróbować i rozpocząć wdrażanie metody obliczania cyfry kontrolnej EAN i testowania jej – fge

+0

Dzięki. Powinieneś opublikować to jako odpowiedź, ponieważ jest to poprawna metoda. – MikkoP

+0

Uhm cóż, to była tylko rada ... – fge

Odpowiedz

3

W

dla (int i = 0; i < isbn13.length(); i ++) { suma + = Character.getNumericValue (isbn13.charAt (I)); }

Sumujesz wszystkie cyfry z numeru ISBN, łącznie z numerami podwójnymi.

Przykład:

cyfra 7 -> double = 14

Ty dodawanie 14 do sumy. Czy powinno być

cyfra 7 -> podwójne = 14 -> większe niż 9? Tak więc 1 + 4 = 5

i należy dodać 5.

+0

Dzięki za odpowiedź! – MikkoP

4

Tu idziesz

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

przeproszeniem wiersze dziennika pomiędzy, jestem kopii wklejenie go z android projektu i jestem pracując na