2

我想知道是否有网络服务或数据库可以让我们在将用户输入存储到数据库之前以编程方式检查用户输入是否是有效的 ISBN 号。或者是否有允许程序员这样做的算法

4

6 回答 6

7

如果查看Wikipedia 页面,他们有一个简单的算法来确保 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;
}
于 2010-11-24T19:21:42.157 回答
2

你可以试试:

http://isbndb.com/docs/api/

于 2010-11-24T19:21:35.157 回答
2

您可以根据以下算法计算校验和:http ://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digits 。这并不能告诉你是否真的有一本书有这个数字,但它会告诉你这个数字是否正确。

于 2010-11-24T19:21:47.670 回答
1

血淋淋的细节在这里。因此,您可以检查校验位并尝试推断国家(可能还有出版商)是什么,但我看不到任何方法可以检查是否有带有该号码的真书

于 2010-11-24T19:23:09.830 回答
1

要仅验证校验位,而不是与已知的书籍列表进行比较,您可以使用 Apache Commons ISBNValidator 类。

ISBNValidator validator = new ISBNValidator(); 
assertFalse(validator.isValid("12345678901234")); 
assertTrue(validator.isValid("0-201-63385-X"));

代码示例来自: https ://apache.googlesource.com/commons-validator/+/trunk/src/test/java/org/apache/commons/validator/ISBNValidatorTest.java

参考: https ://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/ISBNValidator.html

于 2016-06-22T21:51:28.177 回答
0

正如其他人在我对 SO try 的快速搜索中所建议的那样:idbndb

于 2010-11-24T19:22:39.437 回答