检查 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 年)。