An ISBN ( International Standard Book Number) is a ten digit code which uniquely identifies a book. The first nine digits represent the Group, Publisher and Title of the book and the last digit is used to check whether ISBN is correct or not. Each of the first nine digits of the code can take a value between 0 and 9. Sometimes it is necessary to make the last digit equal to ten; this is done by writing the last digit of the code as X. To verify an ISBN, calculate 10 times the first digit, plus 9 times the second digit, plus 8 times the third and so on until we add 1 time the last digit. If the final number leaves no remainder when divided by 11, the code is a valid ISBN.

For example:

02011003311 = 10*0 + 9*2 + 8*0 + 7*1 + 6*1 + 5*0 + 4*3 + 3*3 + 2*1 + 1*1 = 55

Since 55 leaves no remainder when divisible by 11, hence it is a valid ISBN.

Design a program to accept a ten digit code from the user. For an invalid input, display an

appropriate message. Verify the code for its validity in the format specified below:

Test your program with sample data and some random data.

Example 1

INPUT CODE : 0201530821

OUTPUT : SUM = 99

LEAVES NO REMAINDER – VALID ISBN CODE

Example 2

INPUT CODE : 035680324

OUTPUT : INVALID INPUT

Example 1

INPUT CODE : 0231428031

OUTPUT : SUM = 122

LEAVES REMAINDER – INVALID ISBN CODE

The program for the above problem is as follows:

import java.util.*; class ISBN{ public static boolean isValidISBN(String isbn){ int digit, sum=0, len=isbn.length(); if(len!=10) throw new IllegalArgumentException(); for(int i=0;i<len;i++){ digit=isbn.charAt(i)-'0'; digit=(digit==40 || digit==72)?10:digit; sum += digit*(10-i); } System.out.println("OUTPUT:\tSUM = "+sum); return (sum%11)==0; } public static void main(String args[]){ Scanner sc = new Scanner(System.in); String isbn; System.out.print("INPUT CODE:\t"); isbn=sc.nextLine(); System.out.print("OUTPUT:\t\t"); try{ if(isValidISBN(isbn)){ System.out.println("\t\tLEAVES NO REMAINDER- VALID CODE"); }else{ System.out.println("\t\tLEAVES REMAINDER- INVALID CODE"); } }catch(IllegalArgumentException e){ System.out.println("INVALID INPUT"); } } }

The above code is very straight forward, but the students should note that for efficiency length of the string must never be calculated with the condition part of a loop. The length function of the String class iterate through the entire string in order to calculate the length. If the length function is given in the condition part of the loop, it will be executed for each iteration of the loop, thereby increasing the computational complexity from O(N) to O(N^{2}). Also, notice the use of try-catch block and throw statement to separate the error handling logic from the core logic leading to manageable code with increased readability which is very important in large programs where the object oriented programming (OOP) is usually used.

### Vinay Singh

#### Latest posts by Vinay Singh (see all)

- Sorting non boundary elements - February 19, 2016
- Circular Prime – Solution of ISC Computer Practical 2016 - February 18, 2016
- Array Pattern - February 15, 2016