Advertisement
AntonioVillanueva

verificación ISBN-10 y ISBN-13

Apr 18th, 2020
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.11 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: latin-1 -*-
  3. """  verificación ISBN-10 ISBN-13 desde fichero exterior  Antonio Villanueva Segura
  4. """
  5. import sys
  6. import math
  7.  
  8. def isValid(isbn):
  9.     """ valida un isbn"""
  10.     s=0
  11.     m=0
  12.    
  13.     #Analiza si hay algun elemento indeseado
  14.     for i in isbn[:-1]:
  15.         if not i.isdigit():
  16.             return False
  17.            
  18.     if (not isbn[-1].isdigit()) and isbn[-1]!='X':
  19.         return False
  20.    
  21.     if len(isbn)==10:#ISBN_10
  22.         for i in isbn[:-1]:
  23.             s+=int(i) *(10-m)
  24.             m+=1           
  25.         s=(11- s%11) %11
  26.        
  27.         if isbn[-1]=='X':
  28.             return 10==s
  29.            
  30.         return int (isbn[-1])==s
  31.     if len(isbn)==13:#ISBN_13
  32.         for i in isbn[:-1]:
  33.             s+= int(i) * 3**(m % 2);
  34.             m+=1
  35.            
  36.         if (s==10):
  37.             return isbn[-1]=='X'           
  38.            
  39.         if isbn[-1]=='X':
  40.             return 10==s
  41.            
  42.         return (int(isbn[-1]) ==(10- s%10)%10)
  43.        
  44.     return False   
  45.  
  46.  
  47. n = int(input()) #Cuantos datos vamos a leer ?
  48.  
  49. invalidos=[] #n°s invalidos
  50.  
  51. for i in range(n): #N° de ISBN a leer desde un fichero externo <dato.txt
  52.     isbn = input()
  53.     if (not isValid(isbn)):
  54.         invalidos.append(isbn)
  55.  
  56.  
  57. print (str(len(invalidos)) +" invalid:")
  58. for inv in invalidos:
  59.     print (inv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement