Accueil > > > ISBN : RECONNAISSANCE
ISBN : RECONNAISSANCE
Information sur la source
Description
ce petit script me sert dans mon projet en ce moment (gestionnaire de bibliothèque en python). Il permet de gérer les deux format d'ISBN.
Pour plus d'information : http://fr.wikipedia.org/wiki/Num%C3%A9ro_internati onal_normalis%C3%A9_du_livre
La fonction d'entrée est ISBN.
Le choix de la valeur de l'ISBN vide à été choisie comme ça pour la représentation interne dans les autres modules.
Ajout :
Conversion d'ISBN 13 ou EAN en ISBN 10. Utilité ? Pour les urls sur le site amazon.
ps : le svn pour les sources : projet pour un gestionnaire de bibliothèque personnel. Le code source que j'ai poster est dans biblio.py
svn checkout http://pybliblio-manager.googlecode.com/svn/trunk/ pybliblio-manager-read-only
Source
-
- ISBNvide = -1
- def ISBN(isbn):
- """Pour ajouter de facon transparent les ISBN
- Qui sont deux types differents:
- ISBN-10 ==> Ancienne Version
- ISBN-13 et EAN-13 (CodeBarre) ==> Nouvelle Version"""
- #Changement de representation au cas ou...
- try:
- isbn = str(isbn)
- except:
- "ISBN : Mauvaise forme...."
- else:
- #Traitement de toutes les variates d'ecriture....
- isbn = isbn.replace("-","")
- isbn = isbn.replace(".","")
- #Le choix entre les ISBN
- if len(isbn)==10:
- return __IsbnPourDix(isbn)
- elif len(isbn)==13:
- return __IsbnPourTreize(isbn)
- else:
- print "ISBN n'a pas ete reconnue"
- return -1 #FIXME: Houlala verifier ca
-
- def conversionEANetISBN13enISBN10(isbn):
- """Pour cette fonction il nous faut de l'isbn en texte ou en int"""
- try:
- isbn = str(isbn)
- except:
- "ISBN : Mauvaise forme...."
- else:
- if len(isbn)==13:
- #Traitement de toutes les variates d'ecriture....
- isbn = isbn.replace("-","")
- isbn = isbn.replace(".","")
- #On retire ce qui est devant et la cle
- isbn = isbn[3:-1]
- return __convertISBN10(isbn)
- else:
- print "Appel conversion EAN 13 ou ISBN 13 mais ISBN de longueur non egal a 13"
-
- class __IsbnPourDix:
- #Constantes de la classe
- ISBNvide = -1
-
- def __init__(self,isbn):
- "prend un isbn de forme string"
- self.__isbn = self.__traitementISBN(isbn)
-
- def __del__(self):
- del(self)
-
- def __len__(self):
- return len(str(self.__isbn))
-
- def __str__(self):
- if (self.testISBNvide(self.__isbn)):
- return "*ISBN vide*"
- else:
- tmp = str(self.__isbn)
- if len(tmp)==10:
- return tmp
- else:
- return tmp[:-2]+'X'
-
- def __traitementISBN(self,isbn):
- """__traitementISBN10 : isbn --> (isbn sans cle en int, key en int)
- On s'appuye des connaissance sur les ISBN
- Si on a une erreur dans l'isbn elle nous renvoie le ISBNvide
- ATTETION la cle X est en realite 10"""
- try:
- key = isbn[-1]
- isbn = int(isbn[:-1])
- isbnTmp = isbn
- except:
- print "Erreur dans isbn ... elle doit que comporter d'entier sauf la cle"
- return self.ISBNvide
- else:
- keyCalculee = 0
- for i in range(9):
- keyCalculee = keyCalculee + ((isbn % 10) * (i + 2))
- isbn = isbn / 10
- #traitement pour avoir la cle
- keyCalculee = keyCalculee % 11
- keyCalculee = 11 - keyCalculee
-
- #specificite dans l'isbn10
- if key=="X":
- key='10'
- if keyCalculee==11:
- keyCalculee=0
- #fin des specificite dans l'isbn10
-
- if str(keyCalculee)==key:
- return self.__fusionKeyISBN(isbnTmp,int(key))
- else:
- return self.ISBNvide
-
- def __fusionKeyISBN(self,isbn,key):
- """Pour fusionner la cle et l'isbn
- pour avoir un simple entier"""
-
- if key < 10:
- return isbn*10 + key
- else:
- return isbn*100 + key
-
- def setISBN(self,isbn):
- self.__init__(isbn)
-
- def getISBN(self,isbn):
- return self.__isbn
-
- def testISBNvide(self,isbn):
- if(isbn==self.ISBNvide):
- return True
- else:
- return False
-
- class __convertISBN10:
-
- ISBNvide = -1
- def __init__(self,isbn):
- self.__isbn = self.__traitementISBN(isbn)
-
- def __del__(self):
- del(self)
-
- def __len__(self):
- return len(str(self.__isbn))
-
- def __str__(self):
- if (self.testISBNvide(self.__isbn)):
- return "*ISBN vide*"
- else:
- tmp = str(self.__isbn)
- if len(tmp)==10:
- return tmp
- else:
- return tmp[:-2]+'X'
-
- def __traitementISBN(self,isbn):
- """__traitementISBN10 : isbn --> (isbn sans cle en int, key en int)
- On s'appuye des connaissance sur les ISBN
- Si on a une erreur dans l'isbn elle nous renvoie le ISBNvide
- ATTETION la cle X est en realite 10"""
- try:
- isbn = int(isbn)
- isbnTmp = isbn
- except:
- print "Erreur dans isbn ... elle doit que comporter d'entier sauf la cle"
- return self.ISBNvide
- else:
- keyCalculee = 0
- for i in range(9):
- keyCalculee = keyCalculee + ((isbn % 10) * (i + 2))
- isbn = isbn / 10
- #traitement pour avoir la cle
- keyCalculee = keyCalculee % 11
- keyCalculee = 11 - keyCalculee
-
- #specificite dans l'isbn10
- if keyCalculee==11:
- keyCalculee=0
- #fin des specificite dans l'isbn10
- return self.__fusionKeyISBN(isbnTmp,keyCalculee)
-
- def __fusionKeyISBN(self,isbn,key):
- """Pour fusionner la cle et l'isbn
- pour avoir un simple entier"""
-
- if key < 10:
- return isbn*10 + key
- else:
- return isbn*100 + key
-
- def setISBN(self,isbn):
- self.__init__(isbn)
-
- def getISBN(self,isbn):
- return self.__isbn
-
- def testISBNvide(self,isbn):
- if(isbn==self.ISBNvide):
- return True
- else:
- return False
-
-
- class __IsbnPourTreize:
- #Constantes de la classe
- ISBNvide = -1
-
- def __init__(self,isbn):
- "prend un isbn de forme string"
- self.__isbn = self.__traitementISBN(isbn)
-
- def __del__(self):
- del(self)
-
- def __len__(self):
- return len(str(self.__isbn))
-
- def __str__(self):
- if (self.testISBNvide(self.__isbn)):
- return "*ISBN vide*"
- else:
- return str(self.__isbn)
-
- def __traitementISBN(self,isbn):
- """__traitementISBN : isbn --> (isbn sans cle en int, key en int)
- On s'appuye des connaissance sur les ISBN"""
- try:
- key = isbn[-1]
- isbn = int(isbn[:-1])
- isbnTmp = isbn
- except:
- print "Erreur dans isbn ... elle doit comporter que des entiers"
- return self.ISBNvide
- else:
- keyCalculee = 0
- ponderation3 = True
- for i in range(13):
- if ponderation3:
- keyCalculee = keyCalculee + (isbn % 10) * 3
- ponderation3 = False
- else:
- keyCalculee = keyCalculee + (isbn % 10)
- ponderation3 = True
- isbn = isbn / 10
- #traitement pour avoir la cle
- keyCalculee = (- keyCalculee) % 10
- #eyCalculee = 11 - keyCalculee
-
- #le test final
- if str(keyCalculee)==key:
- return self.__fusionKeyISBN(isbnTmp,int(key))
- else:
- print "%s - %s" % (str(keyCalculee),key)
- return self.ISBNvide
-
- def __fusionKeyISBN(self,isbn,key):
- """Pour fusionner la cle et l'isbn
- pour avoir un simple entier"""
- return isbn*10 + key
-
- def setISBN(self,isbn):
- self.__init__(isbn)
-
- def getISBN(self,isbn):
- return self.__isbn
-
- def testISBNvide(self,isbn):
- if(isbn==self.ISBNvide):
- return True
- else:
- return False
-
ISBNvide = -1
def ISBN(isbn):
"""Pour ajouter de facon transparent les ISBN
Qui sont deux types differents:
ISBN-10 ==> Ancienne Version
ISBN-13 et EAN-13 (CodeBarre) ==> Nouvelle Version"""
#Changement de representation au cas ou...
try:
isbn = str(isbn)
except:
"ISBN : Mauvaise forme...."
else:
#Traitement de toutes les variates d'ecriture....
isbn = isbn.replace("-","")
isbn = isbn.replace(".","")
#Le choix entre les ISBN
if len(isbn)==10:
return __IsbnPourDix(isbn)
elif len(isbn)==13:
return __IsbnPourTreize(isbn)
else:
print "ISBN n'a pas ete reconnue"
return -1 #FIXME: Houlala verifier ca
def conversionEANetISBN13enISBN10(isbn):
"""Pour cette fonction il nous faut de l'isbn en texte ou en int"""
try:
isbn = str(isbn)
except:
"ISBN : Mauvaise forme...."
else:
if len(isbn)==13:
#Traitement de toutes les variates d'ecriture....
isbn = isbn.replace("-","")
isbn = isbn.replace(".","")
#On retire ce qui est devant et la cle
isbn = isbn[3:-1]
return __convertISBN10(isbn)
else:
print "Appel conversion EAN 13 ou ISBN 13 mais ISBN de longueur non egal a 13"
class __IsbnPourDix:
#Constantes de la classe
ISBNvide = -1
def __init__(self,isbn):
"prend un isbn de forme string"
self.__isbn = self.__traitementISBN(isbn)
def __del__(self):
del(self)
def __len__(self):
return len(str(self.__isbn))
def __str__(self):
if (self.testISBNvide(self.__isbn)):
return "*ISBN vide*"
else:
tmp = str(self.__isbn)
if len(tmp)==10:
return tmp
else:
return tmp[:-2]+'X'
def __traitementISBN(self,isbn):
"""__traitementISBN10 : isbn --> (isbn sans cle en int, key en int)
On s'appuye des connaissance sur les ISBN
Si on a une erreur dans l'isbn elle nous renvoie le ISBNvide
ATTETION la cle X est en realite 10"""
try:
key = isbn[-1]
isbn = int(isbn[:-1])
isbnTmp = isbn
except:
print "Erreur dans isbn ... elle doit que comporter d'entier sauf la cle"
return self.ISBNvide
else:
keyCalculee = 0
for i in range(9):
keyCalculee = keyCalculee + ((isbn % 10) * (i + 2))
isbn = isbn / 10
#traitement pour avoir la cle
keyCalculee = keyCalculee % 11
keyCalculee = 11 - keyCalculee
#specificite dans l'isbn10
if key=="X":
key='10'
if keyCalculee==11:
keyCalculee=0
#fin des specificite dans l'isbn10
if str(keyCalculee)==key:
return self.__fusionKeyISBN(isbnTmp,int(key))
else:
return self.ISBNvide
def __fusionKeyISBN(self,isbn,key):
"""Pour fusionner la cle et l'isbn
pour avoir un simple entier"""
if key < 10:
return isbn*10 + key
else:
return isbn*100 + key
def setISBN(self,isbn):
self.__init__(isbn)
def getISBN(self,isbn):
return self.__isbn
def testISBNvide(self,isbn):
if(isbn==self.ISBNvide):
return True
else:
return False
class __convertISBN10:
ISBNvide = -1
def __init__(self,isbn):
self.__isbn = self.__traitementISBN(isbn)
def __del__(self):
del(self)
def __len__(self):
return len(str(self.__isbn))
def __str__(self):
if (self.testISBNvide(self.__isbn)):
return "*ISBN vide*"
else:
tmp = str(self.__isbn)
if len(tmp)==10:
return tmp
else:
return tmp[:-2]+'X'
def __traitementISBN(self,isbn):
"""__traitementISBN10 : isbn --> (isbn sans cle en int, key en int)
On s'appuye des connaissance sur les ISBN
Si on a une erreur dans l'isbn elle nous renvoie le ISBNvide
ATTETION la cle X est en realite 10"""
try:
isbn = int(isbn)
isbnTmp = isbn
except:
print "Erreur dans isbn ... elle doit que comporter d'entier sauf la cle"
return self.ISBNvide
else:
keyCalculee = 0
for i in range(9):
keyCalculee = keyCalculee + ((isbn % 10) * (i + 2))
isbn = isbn / 10
#traitement pour avoir la cle
keyCalculee = keyCalculee % 11
keyCalculee = 11 - keyCalculee
#specificite dans l'isbn10
if keyCalculee==11:
keyCalculee=0
#fin des specificite dans l'isbn10
return self.__fusionKeyISBN(isbnTmp,keyCalculee)
def __fusionKeyISBN(self,isbn,key):
"""Pour fusionner la cle et l'isbn
pour avoir un simple entier"""
if key < 10:
return isbn*10 + key
else:
return isbn*100 + key
def setISBN(self,isbn):
self.__init__(isbn)
def getISBN(self,isbn):
return self.__isbn
def testISBNvide(self,isbn):
if(isbn==self.ISBNvide):
return True
else:
return False
class __IsbnPourTreize:
#Constantes de la classe
ISBNvide = -1
def __init__(self,isbn):
"prend un isbn de forme string"
self.__isbn = self.__traitementISBN(isbn)
def __del__(self):
del(self)
def __len__(self):
return len(str(self.__isbn))
def __str__(self):
if (self.testISBNvide(self.__isbn)):
return "*ISBN vide*"
else:
return str(self.__isbn)
def __traitementISBN(self,isbn):
"""__traitementISBN : isbn --> (isbn sans cle en int, key en int)
On s'appuye des connaissance sur les ISBN"""
try:
key = isbn[-1]
isbn = int(isbn[:-1])
isbnTmp = isbn
except:
print "Erreur dans isbn ... elle doit comporter que des entiers"
return self.ISBNvide
else:
keyCalculee = 0
ponderation3 = True
for i in range(13):
if ponderation3:
keyCalculee = keyCalculee + (isbn % 10) * 3
ponderation3 = False
else:
keyCalculee = keyCalculee + (isbn % 10)
ponderation3 = True
isbn = isbn / 10
#traitement pour avoir la cle
keyCalculee = (- keyCalculee) % 10
#eyCalculee = 11 - keyCalculee
#le test final
if str(keyCalculee)==key:
return self.__fusionKeyISBN(isbnTmp,int(key))
else:
print "%s - %s" % (str(keyCalculee),key)
return self.ISBNvide
def __fusionKeyISBN(self,isbn,key):
"""Pour fusionner la cle et l'isbn
pour avoir un simple entier"""
return isbn*10 + key
def setISBN(self,isbn):
self.__init__(isbn)
def getISBN(self,isbn):
return self.__isbn
def testISBNvide(self,isbn):
if(isbn==self.ISBNvide):
return True
else:
return False
Conclusion
On pourrai améliorer cette source en faisant un héritage de la classe __IsbnPourDix à la classe __IsbnPourTreize (en effet le seul changement dans la classe __IsbnPourDix est les fonction interne __traitementISBN et __fusionKeyISBN) mais j'ai eu des problèmes lors de cette maninp car il héritai mal et qu'il ne me changeais pas ces fonctions.
Historique
- 11 avril 2008 11:21:06 :
- Il manquais du code dans la classe __IsbnPourTreize
- 16 avril 2008 15:26:09 :
- Ajout de conversion ISBN 13 et EAN en ISBN 10
Ajout des sources
- 16 avril 2008 15:26:48 :
- Ajout de conversion ISBN 13 et EAN en ISBN 10
Ajout des sources
Sources du même auteur
Sources de la même categorie
TPYCODE, TRADUCTEUR DE CODETPYCODE, TRADUCTEUR DE CODE Bonjour à tous,
Ce programme ne sert pas à grand chose mais c'est mon premier donc pour un début, ça me convient.
Utilisation :
Au lieu d'écri...
par jonathan33350
INVERSEUR DE CHAÎNE DE CARACTÈRE [INTERFACE GRAPHIQUE]INVERSEUR DE CHAÎNE DE CARACTÈRE [INTERFACE GRAPHIQUE]Un petit programme qui inverse une chaîne de caractère saisie par l'utilisateur. Egalement inspiré d'un exercice issus de "Apprendre à Programmer avec...
par SeventhSon
GÉNÉRATEUR DE PASSWORDGÉNÉRATEUR DE PASSWORDVoilà, un petit générateur de mot de passe à exécuter dans un terminal, j'avais pas trop d'idée, donc j'ai transformer mon script bash en script pytho...
par PlugnPlay666
VOCABULARY, RÉVISER SON VOCABULAIRE PÉDAGOGIQUEMENTVOCABULARY, RÉVISER SON VOCABULAIRE PÉDAGOGIQUEMENTcela fait un certain temps que je songeais a créer un programme qui permette de réviser son vocabulaire de manière pédagogique, c'est fait. avec vocab...
par Clempython
PROGRAMME POUR LES MOTS CROISÉSPROGRAMME POUR LES MOTS CROISÉSvoici un petit programme très simple qui ouvre un dico et demande à l'utilisateur un mot avec des espaces et cherche dans le dictionnaire si un mot pe...
par Clempython
Commentaires et avis
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Forum
PYVISA PROBLèMEPYVISA PROBLèME par sandrine44
Cliquez pour lire la suite par sandrine44
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|