Java :: Aufgabe #61

4 Lösungen Lösungen öffentlich

ISBN-Nummern überprüfen

Anfänger - Java von bibir - 03.09.2014 um 09:10 Uhr
Eine ISBN-Nummer setzt sich immer aus vier Teilen zusammen, der Gruppenzahl, Verlagsnummer, Titelnummer und einer Prüfziffer. Diese vier Teile werden durch Bindestriche (oder seltener Leerzeichen) abgetrennt. Eine ISBN-Nummer ist stets zehnstellig.

Die Prüfziffer erlaubt, die Gültigkeit einer ISBN-Nummer festzustellen. Sie wird so gewählt, dass die ganze Nummer folgende mathematische Eigenschaft erfüllt:
Man multipliziere die erste Stelle mit 10, die zweite Stelle mit 9, die dritte mit 8, und so weiter bis zur neunten Stelle (mal 2), und addiere alle erhaltenen Produkte. Wenn man zu dieser Zahl die Prüfziffer dazuaddiert, so muss ein Vielfaches von 11 entstehen. Als Besonderheit kann die Prüfziffer auch den Buchstaben X annehmen, der dann als Zahlenwert 10 interpretiert wird.

Beispiel:
Die ISBN-Nummer lautet 3-8931-9301-4, also rechnen wir
3 * 10 + 8 * 9 + 9 * 8 + 3 * 7 + 1 * 6 + 9 * 5 + 3 * 4 + 0 * 3 + 1 * 2 + Prüfziffer 4 = 264.
Diese Zahl ist 24 * 11, also ist es eine gültige ISBN-Nummer.

Lösungen:

vote_ok
von ElPapito (2680 Punkte) - 08.05.2015 um 19:00 Uhr
Quellcode ausblenden Java-Code

/**
 * @author ElPapito
 * @date 08.05.2015
 */

import java.util.Scanner;

public class ISBNNummernUeberpruefen {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("ISBN: "); // 3-8931-9301-4
		String isbn = scanner.next();
		scanner.close();

		isbn = isbn.replace("-", "");
		isbn = isbn.replace(" ", "");

		if (isbn.length() != 10) {
			System.out.println("Ungueltig! (Laenge)");
			return;
		}

		int sum = 0;
		for (int i = 0; i < 9; i++) {
			char c = isbn.charAt(i);

			if (c < '0' || c > '9') {
				System.out.println("Ungueltig! (Keine Ziffer)");
				return;
			}
			sum += (10 - i) * (c - '0');
		}

		int check = 11 - (sum % 11);
		if (check < 10 && isbn.charAt(9) - '0' == check) {
			System.out.println("Gueltig!");
		} else if (check == 10 && isbn.charAt(9) == 'X') {
			System.out.println("Gueltig!");
		} else {
			System.out.println("Ungueltig! (Pruefsumme)");
		}
	}

}

vote_ok
von Bufkin (1410 Punkte) - 22.08.2017 um 10:50 Uhr
Quellcode ausblenden Java-Code
class isbn
{
    
    public static void ueberpruefen(String isbn) {
        
        int summe = 0;
        int zaehler = 0;
        float summef = 0;
        
        
        for(int i = 10; i >= 2; i--) 
        {
            summe += Character.getNumericValue(isbn.charAt(zaehler)) * i;
            zaehler++;
        }
        
        
        if(isbn.charAt(9) == 'X' || isbn.charAt(9) == 'x')
        {
            summe += 10;
        } else {
            summe += Character.getNumericValue(isbn.charAt(9));
        }
        
    
        summef = (float)summe;
        
        if(summef % 11 == 0) 
        {
            System.out.println("Die ISBN-Nummer ist gültig.");
        } else {
            System.out.println("Die ISBN-Nummer ist ungültig!");
        }
        System.out.println("Summe: " + summe);
    }
    
    
    
    public static void main (String[] args) throws java.lang.Exception
    {
        ueberpruefen("3680087837");
    }
}
vote_ok
von paddlboot (3490 Punkte) - 10.07.2019 um 09:12 Uhr
Quellcode ausblenden Java-Code
import java.util.*;

public class isbn {
	public static void main (String[] args) {
		Scanner scanner = new Scanner(System.in);
		int erg = 0;
		Boolean gueltig = false;
		String isbnstring = "";
		
		do {
			System.out.print("ISBN-Nummer eingeben:\t");
			String isbnnr = scanner.next();
		
			String[] split = isbnnr.split("-");
			
			for(int i = 0; i < split.length; i++) {
				isbnstring += split[i];
			}
		
			if(isbnstring.length() != 10) {
				 System.out.println("Bitte neu eingeben!");
			 } else gueltig = true;
		}while(gueltig == false);
		
		int j = 0;
		
		for(int i = 10; i >= 2; i--) {
			erg += Character.getNumericValue(isbnstring.charAt(j)) * i;
			j++;
		}
		
		//Prüfziffer
		if(isbnstring.charAt(j) == 'X') {
			erg += 10;
		} else erg+= Character.getNumericValue(isbnstring.charAt(j));
		
		if(erg % 11 == 0) System.out.println("Die ISBN-Nummer ist gültig!");
		else System.out.println("Ungültige ISBN-Nummer!");
		
		scanner.close();
	}
}
vote_ok
von nOrdan (1160 Punkte) - 22.07.2019 um 23:05 Uhr
Main-Klasse:

Quellcode ausblenden Java-Code


import Methodensammlung.Methoden;

/**
 * Eine ISBN-Nummer setzt sich immer aus vier Teilen zusammen, der Gruppenzahl, Verlagsnummer, Titelnummer und einer Prüfziffer. Diese vier Teile werden durch Bindestriche
 * (oder seltener Leerzeichen) abgetrennt. Eine ISBN-Nummer ist stets zehnstellig.
 * Die Prüfziffer erlaubt, die Gültigkeit einer ISBN-Nummer festzustellen. Sie wird so gewählt, dass die ganze Nummer folgende mathematische Eigenschaft erfüllt: 
 * Man multipliziere die erste Stelle mit 10, die zweite Stelle mit 9, die dritte mit 8, und so weiter bis zur neunten Stelle (mal 2), und addiere alle erhaltenen Produkte. 
 * Wenn man zu dieser Zahl die Prüfziffer dazuaddiert, so muss ein Vielfaches von 11 entstehen. Als Besonderheit kann die Prüfziffer auch den Buchstaben X annehmen, 
 * der dann als Zahlenwert 10 interpretiert wird. 
 * 
 * Beispiel:
 * Die ISBN-Nummer lautet 3-8931-9301-4, also rechnen wir 3 * 10 + 8 * 9 + 9 * 8 + 3 * 7 + 1 * 6 + 9 * 5 + 3 * 4 + 0 * 3 + 1 * 2 + Prüfziffer 4 = 264. 
 * Diese Zahl ist 24 * 11, also ist es eine gültige ISBN-Nummer. 

 * @author (nOrdan) 
 * @version (22.07.2019)
 */

public class Pruefen
{

    Methoden m = new Methoden();

    public static void main(String [] args)
    {
        Pruefen p = new Pruefen();
        p.inputs();
    }

    private void inputs()
    {
        boolean valid1 = false;
        String isbn = "";
        while (valid1 == false)
        {
            isbn = m.userInput("Geben sie die ISBN-Nummer ein, welche geprüft werden soll");
            m.errorStringInput(isbn);
            isbn = isbn.replace("-","");
            isbn = isbn.replace(" ","");
            if (allgemeineGueltigkeit(isbn) == true)
            {
                valid1 = true;
            }
            else
            {                
                continue;
            }
        }
        mathematischeGueltigkeit(isbn);
    }

    private boolean allgemeineGueltigkeit(String isbn)
    {
        int counter = 0;
        if (isbn.length() == 10)
        {
            for (int i = 0; i < 10; i++)
            {
                if (isbn.charAt(i) >= '0' && isbn.charAt(i) <= '9' || isbn.charAt(9) == 'X' || isbn.charAt(9) == 'x')
                {
                    counter++;
                }
                else
                {
                    m.errorMessage("Die eingegebene ISBN-Nummer enthält nicht nur Zahlen von 0-9 oder ein X als Prüfziffer","Nicht erfülltes Kriterium");
                    return false;
                }
            }
            if (counter == 10)
            {
                return true;
            }
            else
            {
                m.errorMessage("Die eingegebene ISBN-Nummer enthält nicht nur Zahlen von 0-9 oder ein X als Prüfziffer","Nicht erfülltes Kriterium");
                return false;
            }
        }
        else
        {
            m.errorMessage("Die eingegebene ISBN-Nummer ist nicht 10 Zeichen lang!","Nicht erfülltes Kriterium");
            return false;
        }
    }

    private void mathematischeGueltigkeit(String isbn)
    {
        int isbnZahl = 0;
        if (isbn.charAt(9) == 'X' || isbn.charAt(9) == 'x')
        {
            isbnZahl += 10;
        }
        else
        {
            isbnZahl += m.parseInt(String.valueOf(isbn.charAt(9)));
        }
        for (int i = 0; i < 9; i++)
        {
            isbnZahl += m.parseInt(String.valueOf(isbn.charAt(i))) * ((i - 10) * -1);
        }
        if (isbnZahl % 11 == 0)
        {
            m.informationMessage("Ihre ISBN-Nummer ist gültig","Gültig");
        }
        else
        {
            m.informationMessage("Ihre ISBN-Nummer ist ungültig","Ungültig");
        }
    }
}



Methoden die ich aus meiner Methodensammlung benutzt habe:


Quellcode ausblenden Java-Code

 public int parseInt(String input)
    {
        return Integer.parseInt(input);
    }

public void errorStringInput(String input)
    {
        if (input == null) 
        {
            System.exit(0); //Drückt der User auf abbrechen wird null zurück gegeben und das Programm wird beendet
        }
        else if (input.isEmpty() == true)
        {
            informationMessage("Da sie nichts eingegeben haben wird auch nichts ausgegeben","No input");
            System.exit(0);
        }
    }

public void errorMessage(String message,String errorName)
    {
        JOptionPane.showMessageDialog(null,message,errorName,JOptionPane.ERROR_MESSAGE); 
    }

public void informationMessage(String message,String informationName)
    {
        JOptionPane.showMessageDialog(null,message,informationName,JOptionPane.INFORMATION_MESSAGE);
    }

public String userInput(String message)
    {
        return JOptionPane.showInputDialog(message);
    }