Un ISBN (International Standard Book Number) es un número de 10 dígitos que se utiliza para identificar un libro.
Los primeros nueve dígitos del número ISBN se utilizan para representar el título, la editorial y el grupo del libro y el último dígito se utiliza para comprobar si el ISBN es correcto o no.
Los primeros 9 dígitos del mismo, pueden tomar cualquier valor entre 0 y 9, pero los últimos dígitos, a veces pueden tomar valor igual a 10; esto se hace escribiéndolo como ‘X’.
Para verificar un ISBN, calcula 10 veces el primer dígito, más 9 veces el segundo dígito, más 8 veces el tercer dígito y así sucesivamente hasta que sumamos 1 vez el último dígito. Si el número final no deja resto al dividirlo por 11, el código es un ISBN válido.
Ejemplos:
Input : 007462542X Output : Valid 007462542X = 10*0 + 9*0 + 8*7 + 7*4 + 6*6 + 5*2 + 4*5 + 3*4 + 2*2 + 1*10 = 176 Since 55 leaves no remainder when divided by 11, hence it is a valid ISBN. Input : 0112112425 Output : Invalid 0112112425 = 10*0 + 9*1 + 8*1 + 7*2 + 6*1 + 5*1 + 4*1 + 3*4 + 2*2 + 1*5 = 71 Since 71 is not divisible by 11, given number is not a valid ISBN.
Ahora, diseñamos un programa para aceptar un código de diez dígitos del usuario y luego verificaremos si un número es ISBN o no. Mostrar un mensaje apropiado.
Implementación:
C++
// CPP program to check if a // given ISBN is valid or not #include <bits/stdc++.h> using namespace std; bool isValidISBN(string& isbn) { // length must be 10 int n = isbn.length(); if (n != 10) return false; // Computing weighted sum // of first 9 digits int sum = 0; for (int i = 0; i < 9; i++) { int digit = isbn[i] - '0'; if (0 > digit || 9 < digit) return false; sum += (digit * (10 - i)); } // Checking last digit. char last = isbn[9]; if (last != 'X' && (last < '0' || last > '9')) return false; // If last digit is 'X', add 10 // to sum, else add its value. sum += ((last == 'X') ? 10 : (last - '0')); // Return true if weighted sum // of digits is divisible by 11. return (sum % 11 == 0); } // Driver code int main() { string isbn = "007462542X"; if (isValidISBN(isbn)) cout << "Valid"; else cout << "Invalid"; return 0; }
Java
// Java program to check if // a given ISBN isvalid or not class GFG { static boolean isValidISBN(String isbn) { // length must be 10 int n = isbn.length(); if (n != 10) return false; // Computing weighted sum // of first 9 digits int sum = 0; for (int i = 0; i < 9; i++) { int digit = isbn.charAt(i) - '0'; if (0 > digit || 9 < digit) return false; sum += (digit * (10 - i)); } // Checking last digit. char last = isbn.charAt(9); if (last != 'X' && (last < '0' || last > '9')) return false; // If last digit is 'X', add 10 // to sum, else add its value sum += ((last == 'X') ? 10 : (last - '0')); // Return true if weighted sum // of digits is divisible by 11. return (sum % 11 == 0); } // Driver code public static void main(String[] args) { String isbn = "007462542X"; if (isValidISBN(isbn)) System.out.print("Valid"); else System.out.print("Invalid"); } } // This code is contributed // by Anant Agarwal.
Python3
# Python code to check if a # given ISBN is valid or not. def isValidISBN(isbn): # check for length if len(isbn) != 10: return False # Computing weighted sum # of first 9 digits _sum = 0 for i in range(9): if 0 <= int(isbn[i]) <= 9: _sum += int(isbn[i]) * (10 - i) else: return False # Checking last digit if(isbn[9] != 'X' and 0 <= int(isbn[9]) <= 9): return False # If last digit is 'X', add # 10 to sum, else add its value. _sum += 10 if isbn[9] == 'X' else int(isbn[9]) # Return true if weighted sum of # digits is divisible by 11 return (_sum % 11 == 0) # Driver Code isbn = "007462542X" if isValidISBN(isbn): print('Valid') else: print("Invalid") # This code is contributed # by "Abhishek Sharma 44"
C#
// C# program to check if a given // ISBN isvalid or not. using System; class GFG { static bool isValidISBN(string isbn) { // length must be 10 int n = isbn.Length; if (n != 10) return false; // Computing weighted sum of // first 9 digits int sum = 0; for (int i = 0; i < 9; i++) { int digit = isbn[i] - '0'; if (0 > digit || 9 < digit) return false; sum += (digit * (10 - i)); } // Checking last digit. char last = isbn[9]; if (last != 'X' && (last < '0' || last > '9')) return false; // If last digit is 'X', add 10 // to sum, else add its value. sum += ((last == 'X') ? 10 : (last - '0')); // Return true if weighted sum // of digits is divisible by 11. return (sum % 11 == 0); } // Driver code public static void Main() { string isbn = "007462542X"; if (isValidISBN(isbn)) Console.WriteLine("Valid"); else Console.WriteLine("Invalid"); } } // This code is contributed by vt_m.
PHP
<?php // PHP program to check if a // given ISBN is valid or not. function isValidISBN($isbn) { // length must be 10 $n = strlen($isbn); if ($n != 10) return -1; // Computing weighted sum // of first 9 digits $sum = 0; for ($i = 0; $i < 9; $i++) { $digit = $isbn[$i] - '0'; if (0 > $digit || 9 < $digit) return -1; $sum += ($digit * (10 - $i)); } // Checking last digit. $last = $isbn[9]; if ($last != 'X' && ($last < '0' || $last > '9')) return -1; // If last digit is 'X', add 10 // to sum, else add its value. $sum += (($last == 'X') ? 10 : ($last - '0')); // Return true if weighted sum of // digits is divisible by 11. return ($sum % 11 == 0); } // Driver code $isbn = "007462542X"; if (isValidISBN($isbn)) echo "Valid"; else echo "Invalid"; // This code is contributed by ajit. ?>
Javascript
<script> // Javascript program to check if a given // ISBN isvalid or not. function isValidISBN(isbn) { // length must be 10 let n = isbn.length; if (n != 10) return false; // Computing weighted sum of // first 9 digits let sum = 0; for (let i = 0; i < 9; i++) { let digit = isbn[i] - '0'; if (0 > digit || 9 < digit) return false; sum += (digit * (10 - i)); } // Checking last digit. let last = isbn[9]; if (last != 'X' && (last < '0' || last > '9')) return false; // If last digit is 'X', add 10 // to sum, else add its value. sum += ((last == 'X') ? 10 : (last - '0')); // Return true if weighted sum // of digits is divisible by 11. return (sum % 11 == 0); } let isbn = "007462542X"; if (isValidISBN(isbn)) document.write("Valid"); else document.write("Invalid"); </script>
Valid
Complejidad de tiempo: O (1) , ya que el bucle se ejecuta durante un número constante de veces.
Espacio auxiliar: O(1), no se requiere espacio adicional, por lo que es una constante.
El código anterior comprueba el ISBN 10 . La versión reciente de ISBN es ISBN 13 (en 2005).
Publicación traducida automáticamente
Artículo escrito por dewangNautiyal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA