PHP : Conversion EAN/ISBN, l’ultime fonction

4097848238_d8004023b7_o.jpg

J’ai dĂ©jĂ  proposĂ© ici plusieurs fonctions PHP pour convertir convertir un ISBN-10 en EAN-13 ou l’inverse, mais ce n’est pas toujours pratique d’avoir 36 fonctions diffĂ©rentes. Voici donc la fonction unique pour les rassembler toutes et dans les tĂ©nĂšbres les lier.

MAJ du 20/04/2014 : Une version plus récente et orientée-objet.

Quand on bosse sur le web et dans le secteur du livre, on a souvent l’occasion d’utiliser les ISBN-13 (ces identifiants unique dont tous les livres publiĂ©s depuis les annĂ©es 70 sont dotĂ©s) et on a parfois besoin de les convertir en EAN-13 (les codes barres qui se trouvent au dos des livres) pour toutes sortes de raisons, voire en ISBN-10 (ISBN Ă  10 chiffres en usage avant janvier 2007). Pour cette raison, j’ai dĂ©veloppĂ© plusieurs fonctions permettant de faire des conversions, mais je pensais depuis un moment Ă  les regrouper en une seule qui soit multitĂąche. C’est donc chose faite.

La fonction isbn() accepte en entrĂ©e n’importe quelle forme de code : ISBN-10, ISBN-13, EAN, avec ou sans tiret, avec ou sans clĂ© de contrĂŽle, et peut le restituer Ă  la sortie sous forme d’ISBN-10, d’ISBN-13 ou d’EAN. Il peut donc Ă©galement servir Ă  calculer la clĂ© de contrĂŽle d’un ISBN (en l’entrant sans le dernier caractĂšre) ou Ă  calculer la validitĂ© d’un ISBN. Quelques exemples :

Convertir un EAN en ISBN-13

isbn("9782953595109","ISBN13") // retourne 978-2-9535951-0-9

Convertir un ISBN-10 en EAN-13

isbn("2-9535951-0-4","EAN") // retourne 9782953595109

Calculer la clĂ© de contrĂŽle d’un ISBN-13

isbn("978-2-9535951-0","ISBN13") // retourne 978-2-9535951-0-9

VĂ©rifier la validitĂ© d’un EAN

if(isbn("978-2-9535951-0","ISBN13") == "978-2-9535951-0") echo "ok" // affiche ok

function.isbn.php 1.2 : Demo / Télécharger

MAJ du 23/12/2010 (1.1) : OK, donc la premiÚre version était complÚtement bugguée, en voici une qui fonctionne vraiment.

MAJ du 11/09/2013 (1.2) : Correction d’un bug dans le calcul de la clĂ© des ISBN-10 (merci Patrick).L’une des derniĂšres limitations de cette fonction, c’est qu’elle ne gĂšre que les ISBN de livres en langue française (commençant par 978-2) d’aprĂšs les plages de valeur trouvĂ©s sur isbn.org. Une amĂ©lioration intĂ©ressante pour ĂȘtre la prise en charge du fichier XML contenant ces valeurs pour une compatibilitĂ© avec toutes les valeurs possible, ou au moins avec les futurs ISBN commençant par 979. Mais j’ai peur que la recherche des plages de valeurs dans un fichier XML ralentisse considĂ©rablement la fonction.MAJ du 23/12/2010 (1.1) : OK, donc la premiĂšre version Ă©tait complĂštement bugguĂ©e, en voici une qui fonctionne vraiment.

Image : CC-BY-ND Vaxzine