2

データベースに保存する前に、ユーザー入力が有効な ISBN 番号であるかどうかをプログラムで確認できる Web サービスまたはデータベースがそこにあるのだろうかと思いました。または、プログラマーがそれを行うことを可能にするアルゴリズムはありますか

4

6 に答える 6

7

ウィキペディアのページを見ると、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

チェックディジットのみを検証し、既知の書籍リストと比較しない場合は、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 に答える
1

グロ詳細はこちら。したがって、チェック ディジットを確認して、国 (およびおそらく出版社) を推測することができますが、その番号の実際の本があるかどうかを確認する方法はありません。

于 2010-11-24T19:23:09.830 に答える
0

SOのクイック検索で他の人が示唆しているように、次を試してください:idbndb

于 2010-11-24T19:22:39.437 に答える