Je me demandais s'il existait un service Web ou une base de données permettant de vérifier par programme si l'entrée de l'utilisateur est un numéro ISBN valide avant de le stocker dans la base de données. Ou est-il un algorithme qui permet au programmeur de le faireExiste-t-il un moyen de vérifier si un numéro ISBN est un numéro valide avant de le stocker dans la base de données?
Répondre
vous pouvez essayer:
Si regard sur le Wikipedia page, ils ont un algorithme simple pour assurer qu'un ISBN est valide:
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;
}
Bien sûr, cela ne garantit pas que ce soit vrai , possible;)
EDIT: Ceci inclut le 13 ISBN spec: (Il est non testé, et dans le même pseudo-code que la fonction wikipedia)
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;
}
Merci. Cet algorithme ne s'applique qu'aux numéros ISBN 10, savez-vous comment faire ce numéro ISBN 13? La description de l'algorithme pour les chiffres ISBN 13 semble très complexe –
@Harry: J'ai ajouté une version ISBN 13 (mais non testée, et aussi en pseudo-code comme le premier exemple) –
Il y a une erreur dans votre formule. Sur la cinquième à la dernière rangée, vous devriez avoir 'isbn [12] == 10 - sum% 10)' à la place. Consultez cette page Wikipedia http://en.wikipedia.org/wiki/Check_digit – MikkoP
Vous pouvez calco la somme de contrôle selon cet algorithme: http://en.wikipedia.org/wiki/International_Standard_Book_Number#Check_digits. Cela ne vous dit pas s'il y a réellement un livre avec ce numéro mais il vous dit si le nombre est correct.
Merci. Cet algorithme ne s'applique qu'aux numéros ISBN 10, savez-vous comment faire ce numéro ISBN 13? La description de l'algorithme pour le code ISBN 13 semble très complexe. –
Comme d'autres l'ont suggéré dans mes recherches rapides sur essayer SO: idbndb
Citation de 'jarnbjo':' No. ISBNdb.com fournit des données pour les livres de cette base de données. Il ne fournit pas de service pour savoir si l'ISBN est correct ou bien attribué. »Je vais jeter un coup d'œil à cette API. Mais d'après ce que dit 'jarbjo', cela ne fournit pas le service dont j'ai besoin.Merci beaucoup pour vos commentaires: D –
Gory details ici. Donc, vous pouvez vérifier le chiffre de contrôle et essayer de déduire ce que le pays (et peut-être éditeur) sont, mais je ne vois aucun moyen de vérifier il ya un vrai livre avec ce numéro
Le site fournit le code pour vérifier ce dernier chiffre mais il est complexe. Je vais certainement y regarder de plus près. Merci beaucoup +1 –
Pour valider seulement le checkdigit, et ne pas comparer avec une liste connue de livres, vous pouvez utiliser la classe Apache Commons ISBNValidator.
ISBNValidator validator = new ISBNValidator();
assertFalse(validator.isValid("123456789"));
assertTrue(validator.isValid("0-201-63385-X"));
Exemple de code à partir de: https://apache.googlesource.com/commons-validator/+/trunk/src/test/java/org/apache/commons/validator/ISBNValidatorTest.java
Fonctionne bien! :) Merci. –
deuxième cette réponse –
Je ne vois pas que Harry a demandé un moyen de vérifier si un livre est connu du ISBNdb. base de données com? – jarnbjo
et je cite, "est là un service Web ou une base de données là-bas qui nous permettent de vérifier par programme si l'entrée de l'utilisateur est un numéro ISBN valide" la façon dont je le vois isbndb.com est juste un tel service. – shsteimer