[Java] ISBN-checker

Status
Niet open voor verdere reacties.

Saviola

Gebruiker
Lid geworden
30 jun 2002
Berichten
793
Hallo,

Ik heb dit programma nu net geschreven. Het is een programma waarmee je een 10-cijferig ISBN-nummer kan controleren op geldigheid. Het is geschreven in Java.

De source: ISBN-checker.java
Gecompileerde (byte)code: ISBN-checker.class

Om het te kunnen compileren moet je de Java Development Kit hebben. Deze is hier te downloaden.

Het programma is natuurlijk nog sterk te verbeteren, maar dit is de eerste versie (1.0). In de volgende versie moet het mogelijk worden om het ISBN nummer als reeks in te voeren en een 7-cijferig nummer te kunnen controleren.

Andere suggesties zou ik ook graag willen horen :)
 
Vast een suggestie met betrekking tot de syntax:
Een variabele in Java hoeft niet met $ te beginnen, je kunt dus gewoon 'nummers' en 'i' gebruiken ipv '$nummers' en '$i'.
 
Geplaatst door Sauria
Vast een suggestie met betrekking tot de syntax:
Een variabele in Java hoeft niet met $ te beginnen, je kunt dus gewoon 'nummers' en 'i' gebruiken ipv '$nummers' en '$i'.

Weet ik. Maar is een tik van me :D

En ik vind het beter te lezen.
 
Er zijn veel dingen die ik anders zou doen.

Maar heeft volgens mij niet zoveel zin om te posten, want het algoritme klopt niet volgens mij

Ik vul 9020255681 in van site:

http://www.doorhetraam.nl/Literatuur.htm

en hij zegt onjuist. Het zelfde met 0791414752 van dezelfde site.

Heb niet zo verdiept in ISBN nummers, maar zou het nog een keer nakijken !
 
heb het even nagekeken thuis en het komt door deze regel:

if ($totaal2 == 7)

Die klopt niet ! Dit is het juiste algoritme:

Voorbeeld: ISBN 90-270-1165-6

9 x 10 = 90
0 x 9 = 0
2 x 8 = 16
7 x 7 = 49
0 x 6 = 0
1 x 5 = 5
1 x 4 = 4
6 x 3 = 18
5 x 2 = 10

Opgeteld: 192

Na 192 is het eerst hogere getal dat deelbaar is door 11 198. Hiervoor moet het getal 6 bij 192 worden opgeteld ; derhalve is bij dit ISBN het controlecijfer 6.

Dus je moet kijken of het laatset cijfer gelijk is aan het controlecijger.

Heb het programma aangepast zoals ik het zou doen en heb meteen ervoor gezorgd dat je de hele isbn kan invullen. En hij geeft een foutmelding als je letters invult.
 
dit is code

Code:
package isbn;

import javax.swing.JOptionPane;

public class MainISBN
{
  public static final int ISBN_LENGTE = 10;
  public static final int ISBN_DELINGSGETAL = 11;
  private static String ISBN = "";

  public static void main(String [] args)
  {
    try
    {
      while (ISBN.length() != ISBN_LENGTE)
        ISBN = JOptionPane.showInputDialog(null,
            "Voer het 10 cijferige ISBN nummer in !",
            "ISBN-checker 1.0",
            JOptionPane.QUESTION_MESSAGE);

      boolean geldig = controleerISBN(ISBN);

      if (geldig == true)
        JOptionPane.showMessageDialog(null,
                 "Het ingevoerde ISBN-nummer is geldig","ISBN-checker 1.0",
                 JOptionPane.INFORMATION_MESSAGE);
      else
        JOptionPane.showMessageDialog(null,
                "Het ingevoerde ISBN-nummer is ongeldig","ISBN-checker 1.0",
                JOptionPane.INFORMATION_MESSAGE);

      System.exit(0);
    }
    catch (NumberFormatException nbfe)
    {
      JOptionPane.showMessageDialog(null,
               "Het ingevoerde ISBN-nummer is "+ ISBN +
               " en moet uit 10 cijfers bestaan!", "ISBN-checker 1.0",
               JOptionPane.INFORMATION_MESSAGE);
      System.exit(0);
    }
  }

  private static boolean controleerISBN(String isbn)
  {
    int totaal = 0;

    for (int teller = ISBN_LENGTE; teller > 1; teller--)
    {
      int getal = Integer.parseInt(isbn.substring(ISBN_LENGTE - teller,
                                                ISBN_LENGTE - teller + 1));
      totaal += getal * teller;
    }

    int deling = totaal / ISBN_DELINGSGETAL;
    deling++;

    int controleGetal = (deling * ISBN_DELINGSGETAL)- totaal;
    if (controleGetal == Integer.parseInt(isbn.substring(ISBN_LENGTE-1)))
      return true;
    return false;
  }
}
 

Bijlagen

  • isbn.zip
    2,1 KB · Weergaven: 50
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan