C++ program to check for ISBN


Given with the sequence and the task is to identify whether the given sequence is sa ISBN number or not.

What is an ISBN number

ISBN stands for International Standard Book Number is a 10 digit number till December 2006 and now it is revised to 13 digit number from 1 January 2007. Given below is the implementation of 10 digits ISBN.

ISBN digit has a pattern in it as −

  • Starting 9 digits of a number represents Title, Publisher and Group of the book. The value of first 9 digit can range from 0 - 9
  • Last 1 digit checks whether the ISBN is correct or not. Last digit can take the value as 10 and symbol ‘X’ is used to represent this number

How to check whether a given 10 digit number is an ISBN number or not?

  • Start from the first digit of a sequence and multiply it with 10 as ISBN is a 10 digit number
  • Keep moving to the next digit by reducing the value of multiplier by 1
  • Add all the multiplied results
  • Divide the result with 11
  • Apply condition to check for ISBN number
    • If result is divisible by 11 which means leaves no remainder or 0 as remainder than number is an ISBN number
    • If result isn’t divisible by 11 which means leaves some remainder or not 0 as remainder than number isn’t an ISBN number

Example

Input-: 002442142X
Output-: Not ISBN
Input-: 007462542X
Output-: it’s ISBN

Algorithm

Start
Step 1-> declare function to check for ISBN
   bool isvalid(string &isbn_number)
      set int n = isbn_number.length()
         IF (n != 10)
            return false
         End
         Set int sum = 0
         Loop For int i = 0 and i < 9 and i++
            Set int value = isbn_number[i] - '0'
            If (0 > value || 9 < value)
               return false
            End
            Set sum += (value * (10 - i))
         End
         Set char last_val = isbn_number[9]
         IF (last_val != 'X' && (last_val < '0' || last_val > '9'))
            return false
         End
         Set sum += ((last_val == 'X') ? 10 : (last_val - '0'))
         return (sum % 11 == 0)
step 2-> In main()
   set string isbn_number = "002442142X"
   IF (isvalid(isbn_number))
      Print " is Valid"
   End
   Else
      Print " is invalid
   End
Stop

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
//check whether its a valid ISBN or not
bool isvalid(string &isbn_number) {
   int n = isbn_number.length();
   if (n != 10)
      return false;
   int sum = 0;
   for (int i = 0; i < 9; i++) {
      int value = isbn_number[i] - '0';
      if (0 > value || 9 < value)
         return false;
      sum += (value * (10 - i));
   }
   char last_val = isbn_number[9];
   if (last_val != 'X' && (last_val < '0' || last_val > '9'))
      return false;
   sum += ((last_val == 'X') ? 10 : (last_val - '0'));
   return (sum % 11 == 0);
}
int main() {
   string isbn_number = "002442142X";
   if (isvalid(isbn_number))
      cout<<isbn_number<<" is Valid";
   else
      cout<<isbn_number<<" is invalid";
   return 0;
}

Output

IF WE RUN THE ABOVE CODE IT WILL GENERATE FOLLOWING OUTPUT

002442142X is invalid

Updated on: 18-Oct-2019

951 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements