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