Générer un code barre

WRInaute occasionnel
Bonjour les ami(e)s,

je pense qu'il doit exister une fonction ou une classe qui génère des codes barres en php (pour les imprimer ensuite) ? Me trompé-je ? Où pourrais-je trouver ce genre de choses ?
Merci.
 
WRInaute occasionnel
en tout cas moi ça m'intéresse pour générer des images pour éviter les robots sur mon site...
ça fonctionnerait, non?
 
WRInaute impliqué
xdeslandes a dit:
Merci Phix, t'es une star ! C'est axactement cela que je cherche :D .

C'est peut être une star, mais c'était quand même pas bien diffcile à trouver, une recherche sur "php code barre" et c'est la première réponse sur Google. ;-)
 
WRInaute occasionnel
xdeslandes a dit:
Merci Phix, t'es une star ! C'est axactement cela que je cherche :D . As-tu déjà utilisé cette classe ?
Je laisse volontiers ce titre à Olivier Meunier qui, rien qu'avec le succès de Dotclear, le mérite amplement! :)

Sinon non, je ne l'ai jamais utilisé, je me suis juste souvenu qu'elle existait (en faisant une recherche google dans mes neurones :lol: )...
 
WRInaute occasionnel
ben perso, je compte le mettre comme image pour chaque inscription, avec génération au hasard d'un code barre pour la validation d'un inscription (pour éviter les robots ;) )
ensuite, ça doit être pratique pour la gestion des tock, si tu as une douchette, non?
 
WRInaute occasionnel
Tout à fait : mon appli génère une étiquette, avec plein de trucs dessus, et notamment un code barre correspondant à un article. On imprime, et on colle l'étiquette. Cela permet ensuite avec un lecteur (une douchette) de récupérer la suite de caractères encodée 1- plus vite, 2- sans erreur.
Reste à savoir si l'impression aura une qualité correcte pour que le lecteur lise correctement.
NB. Avec la classe Debora du site sus-mentionné, Apache me renvoie une suite de caractères zarbis :
Code:
‰PNG  IHDRxF=ÚÂLPLTEÿÿÿUÂÓ~™IDATxœc`ì€1¶ÓÌw¦iÚÙS"!£üQþ@ó@©’œ6E°ð?Æϳ©H|*aðñññ)@陎›ÓÎ<6µ(œm–sÄw6N;›l±q†A„/ÇÆ“`*a¸¬žá§›±ŒEÂS Ã`yI7cƒ„ÄV C¨ú<Æ ’$
 
WRInaute occasionnel
est ce que tu as bien installé la librairie graphique ?
c'est GD je crois...
de tête, mais j'ai un doute...
à rajouter à tes extensions php ;)

-http://www.siteduzero.com/php/gd.php
 
WRInaute occasionnel
ok...
ça marche sur mon site :

voilà une petite aide ;)

j'ai créé une page avec :
Code:
<?
Require("le_fichier_avec_la_classe.php");
$objCode = new debora($_GET['EAN']);
$objCode->makeImage();
?>

que j'ai appelé ean.php

ensuite sur la page où je veux mettre mon image, j'ai mis ça :
Code:
echo '<img src="ean.php?ean='.$ean.'">';

et ça marche ;)
 
WRInaute occasionnel
Effectivement, j'aurais du voir mon erreur :oops: Cela fonctionne parfaitement.
Dernier prob :
il me faut exactement la même classe, mais pour générer du "code39" ou "code128" (et non du EAN13). Tu sais où je pourrais trouuver cela ? Peut-être vais-je demander au créateur de Debora...
 
WRInaute occasionnel
L'exemple qu'il montre en ligne fonctionne pour EAN13, mais pas pour le code 39 !
C'est toujours la même chose : il semble que générer un EAN13 soit fréquent et facile, mais pour les autres codes, ce ne sont que des exécutables ou des trucs pas faciles d'emploi.
Il est clair que sous forme de classe (comme Debora), l'intégration de l'image générée est faisable dans mon appli.
J'envisage deux solutions au choix :
1- développer une fonction qui traduit mes chaines alphanumériques en chaines de 13 chiffres, qui seront ensuite codées par Debora
2- transformer en classe php (suivant le modèle de Debora) le code suivant qui fonctionne pour le code 39 :
Code:
<?php 
// code barre Code 39 
// Le 27/05/2005 
  
//Chacun des 43 caractères du mode simple se compose d'un motif fixe constitué de 5 barres noires et de 4 barres blanches (espace). 
//Les barres peuvent être fines ou larges (Les larges font 2,2 à 3 fois la largeur des fines) 
//Il y a toujours 3 barres larges parmi les 9 barres. 
//Une barre blanche fine ajoutée à la fin permet l'espacement avec le caractère suivant. 
//Un caractère spécial (Affecté au symbole *) sert de délimiteur de début et de fin. 
//Une clé de contrôle peut être ajoutée; elle est calculée en totalisant les valeurs de chaque caractère tirées du tableau suivant, puis en prenant le reste de la division de cette somme par 43. 
//Dans le tableau suivant les barres noires étroites sont symbolisées par "1", les larges par "111", les barres blanches étroites par "0" et les larges par "000". 
  
//Exemple de clé de contrôle pour : ZB65732 
//35 + 11 + 6 +5 +7 +3 +2 = 69 
//69 / 43 = 1, reste 26 qui correspond à la lettre Q 
//Nouveau code avec la clé : ZB65732Q 
  
// Merci à http://grandzebu.net/informatique/codbar/code39.htm pour l'explication ci-dessus 
  
//il suffit d'appeler le script: codebarre.php?texte=0123456789&h=80&L=2 
  
if(isset($_GET['texte'])) { 
  $text = $_GET['texte']; 
  function str_split( $str ) { 
    $arr = array(); 
    for ($j = 0; $j < strlen($str); $j++) { 
      $arr[] = substr($str,$j,1); 
    } 
    return $arr; 
  } 
  //echo $text; 
  //putenv('GDFONTPATH=' . realpath($_GET['prof'].'../images/')); 
  //putenv('GDFONTPATH='/home/.sites/143/site40/web/images/'); 
  putenv('GDFONTPATH=' . realpath('.')); 
//echo realpath('.'); 
if(!isset($_GET['h'])) {$barcode_hauteur = 80; } else {$barcode_hauteur = $_GET['h'];} 
$tab['0']=' 101000111011101';    $tab2[0]='0';    $tab3['0']=0;    $tab['F']='101110111000101';    $tab2[15]='F';    $tab3['F']=15;    $tab['U']='111000101010111';    $tab2[30]='U';    $tab3['U']=30; 
$tab['1']=' 111010001010111';    $tab2[1]='1';    $tab3['1']=1;    $tab['G']=' 101010001110111';    $tab2[16]='G';    $tab3['G']=16;    $tab['V']='100011101010111';    $tab2[31]='V';    $tab3['V']=31; 
$tab['2']=' 101110001010111';    $tab2[2]='2';    $tab3['2']=2;    $tab['H']=' 111010100011101';    $tab2[17]='H';    $tab3['H']=17;    $tab['W']='111000111010101';    $tab2[32]='W';    $tab3['W']=32; 
$tab['3']=' 111011100010101';    $tab2[3]='3';    $tab3['3']=3;    $tab['I']=' 101110100011101';    $tab2[18]='I';    $tab3['I']=18;    $tab['X']='100010111010111';    $tab2[33]='X';    $tab3['X']=33; 
$tab['4']=' 101000111010111';    $tab2[4]='4';    $tab3['4']=4;    $tab['J']=' 101011100011101';    $tab2[19]='J';    $tab3['J']=19;    $tab['Y']='111000101110101';    $tab2[34]='Y';    $tab3['Y']=34; 
$tab['5']=' 111010001110101';    $tab2[5]='5';    $tab3['5']=5;    $tab['K']=' 111010101000111';    $tab2[20]='K';    $tab3['K']=20;    $tab['Z']='100011101110101';    $tab2[35]='Z';    $tab3['Z']=35; 
$tab['6']=' 101110001110101';    $tab2[6]='6';    $tab3['6']=6;    $tab['L']=' 101110101000111';    $tab2[21]='L';    $tab3['L']=21;    $tab['-']='100010101110111';    $tab2[36]='-';    $tab3['-']=36; 
$tab['7']='101000101110111';    $tab2[7]='7';    $tab3['7']=7;    $tab['M']=' 111011101010001';    $tab2[22]='M';    $tab3['M']=22;    $tab['.']='111000101011101';    $tab2[37]='.';    $tab3['.']=37; 
$tab['8']=' 111010001011101';    $tab2[8]='8';    $tab3['8']=8;    $tab['N']=' 101011101000111';    $tab2[23]='N';    $tab3['N']=23;    $tab[' ']='100011101011101';    $tab2[38]=' ';    $tab3[' ']=38; 
$tab['9']=' 101110001011101';    $tab2[9]='9';    $tab3['9']=9;    $tab['O']=' 111010111010001';    $tab2[24]='O';    $tab3['O']=24;    $tab['$']='100010001000101';    $tab2[39]='$';    $tab3['$']=39; 
$tab['A']=' 111010100010111';    $tab2[10]='A';    $tab3['A']=10;    $tab['P']=' 101110111010001';    $tab2[25]='P';    $tab3['P']=25;    $tab['/']='100010001010001';    $tab2[40]='/';    $tab3['/']=40; 
$tab['B']='101110100010111';    $tab2[11]='B';    $tab3['B']=11;    $tab['Q']='101010111000111';    $tab2[26]='Q';    $tab3['Q']=26;    $tab['+']='100010100010001';    $tab2[41]='+';    $tab3['+']=41; 
$tab['C']='111011101000101';    $tab2[12]='C';    $tab3['C']=12;    $tab['R']='111010101110001';    $tab2[27]='R';    $tab3['R']=27;    $tab['%']='101000100010001';    $tab2[42]='%';    $tab3['%']=42; 
$tab['D']='101011100010111';    $tab2[13]='D';    $tab3['D']=13;    $tab['S']='101110101110001';    $tab2[28]='S';    $tab3['S']=28; 
$tab['E']='111010111000101';    $tab2[14]='E';    $tab3['E']=14;    $tab['T']='101011101110001';    $tab2[29]='T';    $tab3['T']=29;    $tab['*']='100010111011101'; 
  
$j=0; 
$barcode= $tab['*'].'0'; 
foreach ( str_split( $text ) as $caractere ) { 
$barcode.= $tab[$caractere].'0'; 
$j+=$tab3[$caractere]; 
} 
// calcul du code de contôle 
$taille_police=5; 
$j=fmod($j, 43); 
$barcode.=$tab[$tab2[$j]].'0'; 
$barcode.=$tab['*'].'0'; 
$text='*'.$text.$tab2[$j].'*'; 
//barre détermine le nombre de pixel d'une barre 
  //le coef est la différence de largeur entre les barres fines et les épaisse, il doit être entre 2,2 et 3 
  //mais vu qu'on travail avec de barres de 1 pixels les couples possibles sont 
  // dimension 0 1 2 3 4 5 6 7 8 
  $tab=array( 
"barre"=>array(1, 2, 3, 4, 5, 6, 8, 9, 10), 
"coef"=> array(3, 3, 3, 3, 3, 3, 3, 3, 3)); 
  //dimension permet de sélectionner une taille (largeur) dans le tableau ci-dessus 
  if(!isset($_GET['L'])) {$dimension = 2; } else {$dimension = $_GET['L'];} 
$barre=$tab["barre"][$dimension]; 
$coef=$tab["coef"][$dimension]; 
//le nombre total de barre : 3 barres larges pour 6 fines plus 1 barre fine d'espacement 
  $nbre=(3*$coef+6+1)*$barre; 
  //le nombre de barre d'1 pixel (avec le code de contôle et le "*" à chaque extrémité) 
  $barcode_longueur=strlen($barcode)*$barre; 
  //creation de l'image 
  $im = imagecreate($barcode_longueur,$barcode_hauteur); 
  $white = imagecolorallocate($im, 255,255,255); 
  $black = imagecolorallocate($im, 0,0,0); 
  $font_hauteur = imagefontheight( $taille_police ); 
  $font_largeur = imagefontwidth( $taille_police ); 
  //détermination de la hauteur des barre 
  $barcode_hauteur=$barcode_hauteur-$font_hauteur; 
  //on construit chaque barre 
  $xpos=0; 
  foreach ( str_split($barcode) as $caractere ) { 
    for($a=0; $a<$barre; $a++) { 
      if ( $caractere == 0 ) { 
        imageline( $im, $xpos, 0, $xpos, $barcode_hauteur, $white ); 
      } else { 
        imageline( $im, $xpos, 0, $xpos, $barcode_hauteur, $black ); 
      } 
      $xpos++; 
    } 
  } 
  //on ajoute le texte lisible en dessous 
  imagestring( $im, $taille_police,($barcode_longueur-$font_largeur*strlen($text))/2,$barcode_hauteur,$text,$black); 
  //on finalise l'image 
  header("Content-type: image/png"); 
  imagepng($im); 
  imagedestroy($im); 
} 
?>

Qu'en pensez-vous ?
 
WRInaute occasionnel
-http://www.phpcs.com/code.aspx?ID=31659

je crois que tu devrais trouver ce que tu recherche non?
 
WRInaute occasionnel
Ce code est effectivement excellent, mais difficilement exploitable. Il est bien lorsque l'on veut l'appeler directement avec les paramètres, mais j'aimerais bien pouvoir appeler qqch du genre :
Code:
<img src="code39.php?texte=1234567890123qsderty&h=50&L=1" border="0">
Il faudrait, je pense, créer à partir de ce script une classe php. Qu'en pensez-vous ?
(merci de vos coups de mains et avis :D !)
 
WRInaute occasionnel
Je retombe sur ce topic après quelque temps. Juste pour vous dire que finalement, j'ai utilisé la classe php FPDF qui génère des fichiers pdf, et qui est implémentée pour générer des codes barres. Bref, tout ce qu'il me fallait, et super souple, facilement adaptable. Merci FPDF, et merci à vous (un peu tard). :D
 
Discussions similaires
Haut