Есть ли способ проверить, является ли номер ISBN действительным номером перед сохранением в базе данных - PullRequest
2 голосов
/ 24 ноября 2010

Мне было интересно, есть ли там веб-служба или база данных, которая позволяет программно проверять, является ли введенный пользователем действительный номер ISBN, перед тем, как сохранить его в базе данных. Или есть алгоритм, который позволяет программисту сделать это

Ответы [ 6 ]

7 голосов
/ 24 ноября 2010

Если заглянуть на страницу Википедии , у них есть простой алгоритм, чтобы убедиться, что 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;
}
2 голосов
/ 24 ноября 2010

Вы можете вычислить контрольную сумму в соответствии с этим алгоритмом: http://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digits. Это не говорит вам, есть ли на самом деле книга с этим номером, но говорит вам, является ли число правильным.

2 голосов
/ 24 ноября 2010

Вы можете попробовать:

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

1 голос
/ 23 июня 2016

Чтобы проверить только контрольную цифру и не сравнить с известным списком книг, вы можете использовать класс 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

1 голос
/ 24 ноября 2010

Горы подробнее здесь.Таким образом, вы можете проверить контрольную цифру и попытаться определить, какая страна (и, возможно, издатель), но я не вижу способа проверить, есть ли настоящая книга с таким номером

0 голосов
/ 24 ноября 2010

Как и предполагали другие в моих быстрых поисках по SO, попробуйте: idbndb

...