有没有办法在存储到数据库之前检查ISBN号是否是有效数字

Tha*_*ham 2 java validation isbn

我很奇怪是有一个Web服务或数据库,让我们以编程方式检查用户输入是否是有效的ISBN号,然后将其存储在数据库中.或者是否有一种算法允许程序员这样做

Mik*_*ron 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;
}
Run Code Online (Sandbox Code Playgroud)

当然,这并不能确保它是真实的,只有可能;)

编辑:这包括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;
}
Run Code Online (Sandbox Code Playgroud)