我很奇怪是否有一个Web服务或数据库,让我们以编程方式检查用户输入是否是有效的ISBN号,然后再将其存储在数据库中。或者是否有允许程序员执行此操作的算法
答案 0 :(得分:7)
如果查看Wikipedia page,他们有一个简单的算法来确保ISBN有效:
bool is_isbn_valid(char digits[10]) {
int i, a = 0, b = 0;
for (i = 0; i < 10; i++) {
a += digits[i]; // Assumed already converted from ASCII to 0..9
b += a;
}
return b % 11 == 0;
}
当然,这并不能确保它是真正的,只有可能;)
编辑:这包括ISBN 13规范:(未经测试,与维基百科功能的伪代码相同)
bool is_valid_isbn(char isbn[]) {
int sum = 0;
if(isbn.length == 10) {
for(int i = 0; i < 10; i++) {
sum += i * isbn[i]; //asuming this is 0..9, not '0'..'9'
}
if(isbn[9] == sum % 11) return true;
} else if(isbn.length == 13) {
for(int i = 0; i < 12; i++) {
if(i % 2 == 0) {
sum += isbn[i]; //asuming this is 0..9, not '0'..'9'
} else {
sum += isbn[i] * 3;
}
}
if(isbn[12] == 10 - (sum % 10)) return true;
}
return false;
}
答案 1 :(得分:2)
答案 2 :(得分:2)
您可以根据此算法计算校验和:http://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digits。这并没有告诉你实际上是否有一本带有该号码的书,但它会告诉你这个号码是否正确。
答案 3 :(得分:1)
Gory details在这里。所以你可以检查一下校验位,然后去推断国家(也许是出版商)是什么,但是我没有看到任何方法来检查那个有这个数字的真实书籍
答案 4 :(得分:1)
要仅验证checkdigit,而不是与已知的书籍列表进行比较,您可以使用Apache Commons ISBNValidator类。
ISBNValidator validator = new ISBNValidator();
assertFalse(validator.isValid("12345678901234"));
assertTrue(validator.isValid("0-201-63385-X"));
答案 5 :(得分:0)
正如其他人在我的快速搜索中建议的那样:idbndb