Python: Módulo: ISBNlib
pip install isbnlib
Podemos validar si es un ISBN válido (ya sea 10 o 13):
In [1]: from isbnlib import notisbn, is_isbn10, is_isbn13 In [2]: isbn10 = '8474860393' In [3]: isbn13 = '9788474860399' In [4]: noisbn = '7hgy6767' In [5]: notisbn(isbn10) Out[5]: False In [6]: notisbn(isbn13) Out[6]: False In [7]: notisbn(noisbn) Out[7]: True In [9]: is_isbn10(isbn10) Out[9]: True In [10]: is_isbn10(isbn13) Out[10]: False In [11]: is_isbn13(isbn10) Out[11]: False In [12]: is_isbn13(isbn13) Out[12]: True
Como podemos ver la comprobación es si no es isbn, con lo cual devuelve True cuando NO es un ISBN válido y False cuando SI es un ISBN válido.
La validación de cada ISBN (10 o 13) devuelve True si lo es y False si no lo es.
Este método lo que hace es presentar el ISBN con guiones como suele estar en los libros:
In [1]: from isbnlib import mask In [2]: isbn10 = '8474860393' In [3]: isbn13 = '9788474860399' In [4]: noisbn = '7hgy6767' In [5]: mask(isbn10) Out[5]: '84-7486-039-3' In [6]: mask(isbn13) Out[6]: '978-84-7486-039-9' In [7]: mask(noisbn) --------------------------------------------------------------------------- NotValidISBNError Traceback (most recent call last)in ----> 1 mask(noisbn) /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/isbnlib/_ext.py in mask(isbn, separator) 18 def mask(isbn, separator='-'): 19 """`Mask` a canonical ISBN.""" ---> 20 return msk(isbn, separator) 21 22 /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/isbnlib/_msk.py in msk(isbn, separator) 26 if len(ib) not in (10, 13) or ean is None: 27 LOGGER.critical('%s is not a valid ISBN', isbn) ---> 28 raise NotValidISBNError(isbn) 29 30 isbn10 = False NotValidISBNError: (7hgy6767) is not a valid ISBN
Si usamos un ISBN NO válido a una excepción NotValidISBNError.
Podemos convertir un ISBN10 a ISBN13 y viceversa:
In [1]: from isbnlib import to_isbn10, to_isbn13 In [2]: isbn10 = '8474860393' In [3]: isbn13 = '9788474860399' In [4]: noisbn = '7hgy6767' In [5]: to_isbn10(isbn10) Out[5]: '8474860393' In [6]: to_isbn10(isbn13) Out[6]: '8474860393' In [7]: to_isbn13(isbn10) Out[7]: '9788474860399' In [8]: to_isbn13(isbn13) Out[8]: '9788474860399' In [9]: to_isbn10(noisbn) In [10]: to_isbn13(noisbn)
Si convertimos del mismo tipo nos devuelve lo mismo, si es diferente nos devuelve una cadena con el valor convertido. Si el valor no es válido no devuelve nada (None).
Más información isbnlib