# Gültigkeit einer ISBN Nummer prüfen!



## Jim123 (14. Dez 2010)

Hallo!

Ich benötige eine methode die mit isbn (10 & 13) auf gültigkeit überprüft...
Habe schon verschiedene Lösungsansätze probiert, leider *alle* ohne erfolgt!!

################################
Beispiel für ISBN 10: 3-12-517154-7
Beispiel für ISBN 13: 978-3-7657-2781-8
################################


```
public String setIsbn(String isbn) {
		String validIsbn = "## ISBN ungültig ##";
		int sumIsbn = 0;
		
		if(isbn.length() == 13){ // ISBN 10
			char z1 = isbn.charAt(0);
			char z2 = isbn.charAt(2);
			char z3 = isbn.charAt(3);
			char z4 = isbn.charAt(5);
			char z5 = isbn.charAt(6);
			char z6 = isbn.charAt(7);
			char z7 = isbn.charAt(8);
			char z8 = isbn.charAt(9);
			char z9 = isbn.charAt(10);
			char z0 = isbn.charAt(12);
			
			sumIsbn = ((z1*10) + (z2*9) + (z3*8) + (z4*7) + (z5*6) + (z6*5) + (z7*4) + (z8*3) + (z9*2) + (z0*1)) % 11;
			if(sumIsbn == z0){
				validIsbn = isbn;
			}
		}
		if(isbn.length() == 17){ // ISBN 13
			
			char z1b = isbn.charAt(0);
			char z2b = isbn.charAt(1); // *3
			char z3b = isbn.charAt(2);
			char z4b = isbn.charAt(4); // *3
			char z5b = isbn.charAt(6);
			char z6b = isbn.charAt(7); // *3
			char z7b = isbn.charAt(8);
			char z8b = isbn.charAt(9); // *3
			char z9b = isbn.charAt(11);
			char z10b = isbn.charAt(12); // *3
			char z11b = isbn.charAt(13);
			char z12b = isbn.charAt(14); // *3
			char z13b = isbn.charAt(16);
			
			sumIsbn = z1b + z3b + z5b + z7b + z9b + z11b + z13b + (3 * (z2b + z4b + z6b + z8b + z10b + z12b));
			System.out.println(sumIsbn);
			
			int tmp = sumIsbn % 10;
			if((10-tmp)%10 == z13b){
				validIsbn = isbn;
			}
		}
		return validIsbn;
	}
```

Was habe ich da falsch? :autsch::autsch:

1. Ich verstehe nicht warum bei (z1*10) + (z2*9) + (z3*8) + (z4*7) + (z5*6) + (z6*5) + (z7*4) + (z8*3) + (z9*2) + (z0*1) --> 2750 raus kommt!

2. z1b + z3b + z5b + z7b + z9b + z11b + z13b + (3 * (z2b + z4b + z6b + z8b + z10b + z12b))
Sollte eigentlich 132 ergeben mein compiler suckt aber *1340* aus ???:L

Bitte um hilfe muss das bis heute abend fertig bekommen

danke! Gruss


----------



## SlaterB (14. Dez 2010)

schau dir das mal an:

```
public class Test {
    public static void main(String[] args)  {
        char c = 0;

        c = 5;
        System.out.println("erste  Fünf: " + c + " - " + (int)c);
        c = '5';
        System.out.println("zweite Fünf: " + c + " - " + (int)c);

    }
}
```

ASCII-Tabelle


----------



## fastjack (14. Dez 2010)

Meldanors ISBN-Checker:

http://www.java-forum.org/codeschnipsel-u-projekte/93524-isbn-checker.html


----------



## ARadauer (14. Dez 2010)

mhn ... ich sehe da code verdopplung ;-)


----------



## Gast2 (14. Dez 2010)

```
public static boolean checkISBN10(int[] isbn) {
		int sum = 0;
		for (int i = 1; i <= isbn.length; i++) {
			sum += i * isbn[i - 1];
		}
		if (sum % 11 == 0) {
			return true;
		} else {

			return false;
		}

	}

	public static boolean checkISBN13(int[] isbn) {
		int sum = 0;
		for (int i = 1; i < isbn.length; i++) {
			if (i % 2 == 0) {
				sum += isbn[i - 1] * 3;
			} else {
				sum += isbn[i - 1];
			}
		}

		int lastDigit = sum % 10;

		int check = (10 - lastDigit) % 10;

		if (isbn[isbn.length - 1] == check) {
			return true;
		} else {
			return false;
		}
	}

	public static void main(String[] args) {
		int[] isbn10 = new int[] { 3, 8, 6, 6, 8, 0, 1, 9, 2 };
		System.out.println(checkISBN10(isbn10));
		int[] isbn13 = new int[] { 9, 7, 8, 3, 7, 6, 5, 7, 2, 7, 8, 1, 8 };
		System.out.println(checkISBN13(isbn13));
	}
```

Einfach ganz strikt den nach Wikipedia


----------



## ARadauer (14. Dez 2010)

```
((z1*10) + (z2*9) + (z3*8) + (z4*7) + (z5*6) + (z6*5) + (z7*4) + (z8*3) + (z9*2) + (z0*1))
```
mhn ja.... ich glaub, das ist falsch... woher hast du das?
Internationale Standardbuchnummer ? Wikipedia
erklärt den algorithmus nochmal...


----------

