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