begin process at 2010 07 29 16:04:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > ISBN : RECONNAISSANCE

ISBN : RECONNAISSANCE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caratère Classé sous :isbn, ean13, livre Niveau :Débutant Date de création :11/04/2008 Date de mise à jour :16/04/2008 15:26:48 Vu / téléchargé :2 491 / 40

Auteur : beltegeuse

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note


 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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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

CLASSE GÉNÉRIQUE - PLATEAU
Source avec Zip Source avec une capture PYSNAKE WITH PYGAME

 Sources de la même categorie

Source avec Zip Source avec une capture GÉNÉRATEUR DE PASSWORD par PlugnPlay666
Source avec Zip Source avec une capture VOCABULARY, RÉVISER SON VOCABULAIRE PÉDAGOGIQUEMENT par Clempython
Source avec Zip Source avec une capture PROGRAMME POUR LES MOTS CROISÉS par Clempython
CHANGEMENT DE CASSE par linkid
Source avec Zip CONCATÉNER DES FICHIERS TEXTES par amaury74

 Sources en rapport avec celle ci

Source avec Zip INFORMATIONS SUR UN ISBN DEPUIS INTERNET par lepecheur

Commentaires et avis

Commentaire de bir le 15/04/2008 19:30:52

merci de me passé les binaire de ton soft car je cherche un comme ca depuis longtemps

Commentaire de mickbad le 20/04/2008 12:04:28

BIR > télécharge python2.5 (www.python.org) et just do it

python est un langage interprété comme java (en gros). Ok tu peux compiler avec py2exe sous windows ou freeze sous *nix  pour produire du binaire (en fait du p-code) mais ce n'est pas fait pour ça à l'origine ;)

en tout cas tu as le code et c'est largement suffisant ou alors tu ne connais pas assez python ;)

bonne continuation,
.Mick.

Commentaire de xeolin le 13/05/2008 18:31:53 10/10

Consept supper +5
Pas de commentaire -1
Utile +1

Vraiment c'est une supperbe idee :)
Et je ne conaissait pas ce system, tu m'as appris quelque chose ca vaut un 21.5/20

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales