Java >> Java tutorial >  >> Java

ISBN-nummer i Java

ISBN forstår International Standard Book Number, som bruges til at identificere en bog. I dette indlæg vil vi skrive et Java-program for at kontrollere, om det givne nummer er et gyldigt ISBN-nummer eller ej?

Fra 1970 til udgangen af ​​december 2006 er det et 10-cifret tal, men siden 1. januar 2007 består de nu altid af 13 cifre.

ISBN-nummeret med 10 cifre kaldes ISBN-10 på samme måde, ISBN-nummeret med 13 cifre kaldes ISBN-13. I dag er ISBN-10 forældet og konverteret til ISBN-13.

ISBN-10

De første ni cifre i ISBN-nummeret bruges til at repræsentere bogens titel, udgiver og gruppe, og det sidste ciffer bruges til at kontrollere, om ISBN-nummeret er korrekt eller ej.

For ISBN er summen af ​​alle ti cifre, hver ganget med sin vægt i stigende rækkefølge fra 1 til 10, et multiplum af 11. ISBN-10 kan repræsenteres som,

x1 + 2x2 + 3x3 + 4x4 + 5x5 + 6x6 + 7x7 + 8x8 + 9x9 + 10x10 =k*11, hvor k er et heltal.

Eksempel:-
Antal =0306406152
Sum =(0*1) + (3*2) + (0*3) + (6*4) + (4*5) + (0*6) ) + (6*7) + (1*8) + (5*9) + (2*10)
=> Sum =0 + 6 + 0 + 24 + 20 + 0 + 42 + 8 + 45 + 20
=> Sum =165 og 165 / 11 =15
Da 165 er deleligt med 11, er 0306406152 et gyldigt ISBN-10.

De første 9 cifre i ISBN-10-nummeret kan have en hvilken som helst værdi mellem 0 og 9, men det sidste ciffer kan have værdier mellem 0 og 10, og 10 er repræsenteret som X.

Et andet eksempel på ISBN:-
Number =007462542X
Sum =(0*1) + (0*2) + (7*3) + (4*4) + (6*5) + ( 2*6) + (5*7) + (4*8) + (2*9) + (10*10)
=> Sum =0 + 0 + 21 + 16 + 30 + 12 + 35 + 32 + 18 + 100
=> Sum =264
Og 264 er deleligt med 11 som 24*11 =264, så 007462542X er et gyldigt ISBN-10.

ISBN-13

I ISBN-13 er summen af ​​alle de tretten cifre, hver ganget med deres (heltals) vægt, skiftende mellem 1 og 3, et multiplum af 10.

x1 + 3x2 + x3 + 3x4 + x5 + 3x6 + x7 + 3x8 + x9 + 3x10 + x11 + 3x12 + x13 =k*10, hvor k er et heltal.

Eksempel:-
Antal =9780306406157
Sum =( 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)
=> Sum =9 + 21 + 8 + 0 + 3 + 0 + 6 + 12 + 0 + 18 + 1 + 15 + 7
=> Sum =100, det ender med 0, så det er deleligt med 10.
Derfor er 9780306406157 et ISBN-13.

Det sidste ciffer i ISBN-13 skal være fra 0 til 9.

Forskellen mellem et ISBN-13 og ISBN-10 er præfikset "978" foran på det 13 ciffer, hvilket resulterer i et andet kontrolciffer (det sidste tal eller bogstavet x). Et ISBN-10 konverteres til ISBN-13 ved at sætte "978" foran ISBN-10 og genberegne det endelige kontrolsumciffer ved hjælp af ISBN-13-algoritmen.

Procedure for at udvikle Java-metode til at kontrollere, om nummeret er ISBN eller ej

Bemærk:- ISBN-nummer kan indeholde mellemrum eller – som 978-3-16-148410-0

1) Tag et tal som streng
2) Fjern bindestreg eller mellemrum
3) Tjek om det er et tal eller ej
4) Find dets længde, hvis længden er 10, så tjek for ISBN-10 eller hvis længden er 13, så tjek for ISBN-13, ellers er det ikke et isbn-nummer.

Procedure til at tjekke for ISBN-10

1) Tag et tal som streng
2) Op til 9. ciffer, hent hvert tegn, konverter det til tal og beregn derefter summen
3) For det sidste ciffer skal du kontrollere det 10 eller ej, fordi 10 vil være repræsenteret som x eller X, ikke som et normalt tal, og beregn derefter summen baseret på det tal.
4) Tjek nu, at summen er helt delelig med 11 eller ej? Hvis ja, så er det ISBN-10

Procedure til at tjekke for ISBN-13

1) Tag et tal som streng
2) Hent hvert tegn og for cifre på ulige plads gange med 1 og cifre på lige plads gange med 3, beregn derefter sumværdien
3) Tjek summen er fuldstændig deleligt med 10 eller ej? Hvis ja, så er det ISBN-13

Java-program for ISBN-nummer

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

Outputtet for de forskellige testcases er:-

Indtast nummer::978-3-16-148410-0
978-3-16-148410-0 er et isbn-nummer.

Indtast nummer::007462542X
007462542X er et isbn-nummer.

Indtast nummer::978-3-1X-1X8X10-0
978-3-1X-1X8X10-0 er ikke et isbn-nummer.

I de fleste bøger kan ISBN-nummeret findes på bagsiden ved siden af ​​stregkoden. Hvis en bog ikke viser ISBN'et på bagsiden, skal du se på siden med oplysninger om ophavsret og udgiver, og ISBN'et vil blive fundet der.


Java tag