📜  检查 ISBN 的程序

📅  最后修改于: 2022-05-13 01:57:07.769000             🧑  作者: Mango

检查 ISBN 的程序

ISBN(国际标准书号)是一个 10 位数字,用于识别一本书。
ISBN 号的前九位用于表示书名、出版商和组,最后一位用于检查 ISBN 是否正确。


它的前 9 位,可以取 0 到 9 之间的任意值,但最后一位,有时可以取等于 10 的值;这是通过将其写为“X”来完成的。

要验证 ISBN,请计算第一个数字的 10 倍,再加上第二个数字的 9 倍,再加上第三个数字的 8 倍,依此类推,直到我们将最后一个数字加 1 倍。如果最终数字除以 11 后没有余数,则代码是有效的 ISBN。

例子 :

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.

现在,我们设计一个程序来接受用户的十位代码,然后我们将检查一个数字是否是 ISBN。显示适当的消息。

C++
// CPP program to check if a
// given ISBN is valid or not
#include 
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
 $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


输出 :

Valid

上面的代码检查 ISBN 10。最新版本的 ISBN 是 ISBN 13(2005 年)。