Java >> Tutoriel Java >  >> Java

Numéro ISBN en Java

ISBN signifie International Standard Book Number, qui est utilisé pour identifier un livre. Dans cet article, nous allons écrire un programme Java pour vérifier si le numéro donné est un numéro ISBN valide ou non ?

De 1970 à fin décembre 2006, c'est un numéro à 10 chiffres, mais depuis le 1er janvier 2007, ils sont désormais toujours composés de 13 chiffres.

Le numéro ISBN à 10 chiffres est appelé ISBN-10 de même, le numéro ISBN à 13 chiffres est appelé ISBN-13. De nos jours, l'ISBN-10 est obsolète et converti en ISBN-13.

ISBN-10

Les neuf premiers chiffres du numéro ISBN sont utilisés pour représenter le titre, l'éditeur et le groupe du livre et le dernier chiffre est utilisé pour vérifier si l'ISBN est correct ou non.

Pour l'ISBN, la somme des dix chiffres, chacun multiplié par son poids dans l'ordre croissant de 1 à 10, est un multiple de 11. L'ISBN-10 peut être représenté par,

x1 + 2x2 + 3x3 + 4x4 + 5x5 + 6x6 + 7x7 + 8x8 + 9x9 + 10x10 =k*11, où k est un entier.

Exemple :-
Nombre =0306406152
Somme =(0*1) + (3*2) + (0*3) + (6*4) + (4*5) + (0*6 ) + (6*7) + (1*8) + (5*9) + (2*10)
=> Somme =0 + 6 + 0 + 24 + 20 + 0 + 42 + 8 + 45 + 20
=> Somme =165, et 165 / 11 =15
Étant donné que 165 est divisible par 11, 0306406152 est donc un ISBN-10 valide.

Les 9 premiers chiffres du numéro ISBN-10 peuvent avoir n'importe quelle valeur entre 0 et 9, mais le dernier chiffre peut avoir des valeurs entre 0 et 10, et le 10 est représenté par X.

Un autre exemple d'ISBN :-
Numéro =007462542X
Somme =(0*1) + (0*2) + (7*3) + (4*4) + (6*5) + ( 2*6) + (5*7) + (4*8) + (2*9) + (10*10)
=> Somme =0 + 0 + 21 + 16 + 30 + 12 + 35 + 32 + 18 + 100
=> Somme =264
Et 264 est divisible de 11 comme 24*11 =264, donc 007462542X est un ISBN-10 valide.

ISBN-13

Dans l'ISBN-13, la somme de tous les treize chiffres, chacun multiplié par son poids (entier), alternant entre 1 et 3, est un multiple de 10.

x1 + 3x2 + x3 + 3x4 + x5 + 3x6 + x7 + 3x8 + x9 + 3x10 + x11 + 3x12 + x13 =k*10, où k est un entier.

Exemple :-
Nombre =9780306406157
Somme =( 9*1) + (7*3) + (8*1) + (0*3) + (3*1) + (0*3 ) + (6*1) + (4*3) + (0*1) + (6*3) + (1*1) + (5*3) + (7*1)
=> Somme =9 + 21 + 8 + 0 + 3 + 0 + 6 + 12 + 0 + 18 + 1 + 15 + 7
=> Somme =100, elle se termine par 0 donc elle est divisible par 10.
Par conséquent, 9780306406157 est un ISBN-13.

Le dernier chiffre de l'ISBN-13 doit être compris entre 0 et 9.

La différence entre un ISBN-13 et un ISBN-10 est le préfixe « 978 » devant le 13e chiffre, ce qui donne un chiffre de contrôle différent (le dernier chiffre ou la lettre x). Un ISBN-10 est converti en ISBN-13 en ajoutant "978" à l'ISBN-10 et en recalculant le chiffre de la somme de contrôle finale à l'aide de l'algorithme ISBN-13.

Procédure pour développer une méthode Java pour vérifier que le numéro est ISBN ou non

Remarque :- Le numéro ISBN peut contenir un espace ou - comme 978-3-16-148410-0

1) Prenez un nombre sous forme de chaîne
2) Supprimez le trait d'union ou l'espace
3) Vérifiez s'il s'agit d'un nombre ou non
4) Trouvez sa longueur, si la longueur est de 10, vérifiez l'ISBN-10 ou si la longueur est 13, vérifiez l'ISBN-13 sinon ce n'est pas un numéro isbn.

Procédure pour vérifier l'ISBN-10

1) Prenez un nombre sous forme de chaîne
2) Jusqu'au 9e chiffre, récupérez chaque caractère, convertissez-le en nombre, puis calculez la somme
3) Pour le dernier chiffre, cochez 10 ou non, car 10 sera représenté par x ou X, et non comme un nombre normal, puis calculez la somme en fonction de ce nombre.
4) Maintenant, vérifiez que la somme est entièrement divisible par 11 ou non ? Si oui, alors c'est ISBN-10

Procédure pour vérifier l'ISBN-13

1) Prenez un nombre sous forme de chaîne
2) Récupérez chaque caractère et pour les chiffres impairs, multipliez par 1 et les chiffres pairs multiplient par 3, puis calculez la valeur de la somme
3) Vérifiez que la somme est complète divisible par 10 ou pas ? Si oui, alors c'est ISBN-13

Programme Java pour le numéro ISBN

import java.util.Scanner;

public class Test1 {

   // method to check number is ISBN 
   public static boolean isISBN(String number) {

      // declare variable
      int length = 0;

      // remove all hyphens
      number = number.replace("-", "");
      // remove all spaces
      number = number.replace(" ", "");

      // check result string is a number or not
      try {
         // except for the case where
         // ISBN-10 ends with X or x
         char ch = number.charAt(9);
         ch = Character.toUpperCase(ch);
         if( ch != 'X') {
            // don't store, only check
            Long.parseLong(number);
         }
      } catch(NumberFormatException nfe) {
         // not a number
         return false;
      }

      // find length
      length = number.length();
      if(length==13)
         return isISBN13(number);
      else if(length==10)
         return isISBN10(number);

      return false;
   }

   // method to check ISBN-10
   private static boolean isISBN10(String number) {

      // declare variables
      int sum = 0;
      int digit = 0;
      char ch = '\0';

      // add upto 9th digit
      for(int i=1; i<=9; i++) {
         ch = number.charAt(i-1);
         digit = Character.getNumericValue(ch);
         sum += (i* digit);
      }

      // last digit
      ch = number.charAt(9);
      ch = Character.toUpperCase(ch);
      if(ch =='X')
         sum += (10*10);
      else {
         digit = Character.getNumericValue(ch);
         sum += (digit * 10);
      }

      // check sum 
      if(sum % 11 == 0)
         return true;

      return false;
   }

   // method to check ISBN-13
   private static boolean isISBN13(String number) {

      // declare variables
      int sum = 0;
      int multiple = 0;
      char ch = '\0';
      int digit = 0;

      // add digits
      for(int i=1; i<=13; i++) {

         if(i % 2 == 0)
            multiple = 3;
         else multiple = 1;

         // fetch digit
         ch = number.charAt(i-1);
         // convert it to number
         digit = Character.getNumericValue(ch);

         // addition
         sum += (multiple*digit);
      }

      // check sum
      if(sum%10 == 0)
         return true;
      return false;
   }

   // main method
   public static void main(String[] args) {

     // declare variables
     String number = null;
     boolean result = false;

     //create Scanner class object to take input
     Scanner scan = new Scanner(System.in);

     // take input from end-user
     System.out.print("Enter number::");
     number = scan.nextLine();

     // check number is isbn number or not
     result = isISBN(number);

     // display result
     if(result)
     System.out.println(number +
          " is an isbn number.");
     else
     System.out.println(number +
          " is not an isbn number.");

     // close Scanner class object
     scan.close();
   }
}

La sortie pour les différents cas de test est :-

Entrez le numéro ::978-3-16-148410-0
978-3-16-148410-0 est un numéro isbn.

Entrez le numéro ::007462542X
007462542X est un numéro isbn.

Entrez le numéro ::978-3-1X-1X8X10-0
978-3-1X-1X8X10-0 n'est pas un numéro isbn.

Dans la plupart des livres, le numéro ISBN se trouve au dos de la couverture, à côté du code-barres. Si un livre n'affiche pas l'ISBN sur la couverture arrière, regardez sur la page contenant les informations sur le copyright et l'éditeur et l'ISBN s'y trouvera.


Balise Java