2010-11-24 17 views

Répondre

2

vous pouvez essayer:

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

+0

deuxième cette réponse –

+0

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

+0

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

7

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; 
} 
+0

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 –

+1

@Harry: J'ai ajouté une version ISBN 13 (mais non testée, et aussi en pseudo-code comme le premier exemple) –

+1

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

2

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.

+0

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. –

0

Comme d'autres l'ont suggéré dans mes recherches rapides sur essayer SO: idbndb

+0

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 –

1

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

+0

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 –

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

Références: https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/ISBNValidator.html

+0

Fonctionne bien! :) Merci. –