Gérer un code barre (code 39)

Bonjour

Voici un bout de code qui permet de générer une image de code barre type 3to9.
Utile pour gérer une carte d'adhérent, un pointage, une gestion de stock, etc....

L'avantage du code39 est qu'il est facile à générer, car il ne nécessite aucun algorithme.
Chaque caractère est mis bout à bout.

Créez la page code39.php dans le dossier includes

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1.  
  2. <?php
  3. /* GENERER UN CODE BARRE CODE 39 AVEC PHP/GD
  4. * Source : http://thierry-godin.developpez.com/, Correction : Fifi69
  5. * Uploader dans includes
  6. * echo "<img src='includes/code39.php?string=" . htmlentities($string_a_coder,ENT_QUOTES,"ISO8859-1") . "&amp;h=25&amp;control=1'/>";
  7. * h et control sont optionnels
  8. *************************************/
  9.  
  10. //Vérification des paramètres passés par l'URL
  11. if(isset($_GET['string'])) {
  12.     //$TheString = preg_replace('&#164;[^0-9A-Z. $/+%*-]&#164;', '', strtoupper($_GET['string']));
  13.     $TheString = preg_replace('[^0-9A-Z. $/+%*-]', '', strtoupper($_GET['string']));
  14.     $bc_height = 20; // Hauteur des barres par defaut
  15.     if(isset($_GET['h'])) {$bc_height = $_GET['h'];}
  16.  
  17.     // tableau Char -> Code
  18.     $TabCode = array(
  19.        '0' =>  '101000111011101',
  20.        '1' =>  '111010001010111',
  21.        '2' =>  '101110001010111',
  22.        '3' =>  '111011100010101',
  23.        '4' =>  '101000111010111',
  24.        '5' =>  '111010001110101',
  25.        '6' =>  '101110001110101',
  26.        '7' =>  '101000101110111',
  27.        '8' =>  '111010001011101',
  28.        '9' =>  '101110001011101',
  29.        
  30.        'A' =>  '111010100010111',
  31.        'B' =>  '101110100010111',
  32.        'C' =>  '111011101000101',
  33.        'D' =>  '101011100010111',
  34.        'E' =>  '111010111000101',
  35.        'F' =>  '101110111000101',
  36.        'G' =>  '101010001110111',
  37.        'H' =>  '111010100011101',
  38.        'I' =>  '101110100011101',
  39.        'J' =>  '101011100011101',
  40.        'K' =>  '111010101000111',
  41.        'L' =>  '101110101000111',
  42.        'M' =>  '111011101010001',
  43.        'N' =>  '101011101000111',
  44.        'O' =>  '111010111010001',
  45.        'P' =>  '101110111010001',
  46.        'Q' =>  '101010111000111',
  47.        'R' =>  '111010101110001',
  48.        'S' =>  '101110101110001',
  49.        'T' =>  '101011101110001',
  50.        'U' =>  '111000101010111',
  51.        'V' =>  '100011101010111',
  52.        'W' =>  '111000111010101',
  53.        'X' =>  '100010111010111',
  54.        'Y' =>  '111000101110101',
  55.        'Z' =>  '100011101110101',
  56.        
  57.        '-' =>  '100010101110111',
  58.        '.' =>  '111000101011101',
  59.        ' ' =>  '100011101011101',
  60.        '$' =>  '100010001000101',
  61.        '/' =>  '100010001010001',
  62.        '+' =>  '100010100010001',
  63.        '%' =>  '101000100010001',
  64.        '*' =>  '100010111011101'
  65.     );
  66.  
  67.     // convertir la chaine en code
  68.     $CodeBar = '';
  69.     $TabKeys = array_keys($TabCode); // tableau des caractères seuls
  70.     
  71.     $TotalChar = 0;
  72.     for($i = 0; $i < strlen($TheString); $i++) {
  73.         $CodeBar .= "0".$TabCode[$TheString[$i]];
  74.         //récupération de l'index du caractère + calcul de la somme des index
  75.         foreach($TabKeys as $key => $value) {
  76.             if($value === $TheString[$i]){ $TotalChar += $key;}
  77.         }
  78.     }
  79.  
  80.     if($_GET['control'] == "1") {  //ajouter le caratère de controle
  81.         $IndexControl = bcmod($TotalChar, 43); //calculer le caractère de controle
  82.         $CodeBar.= "0" . $TabCode[$TabKeys[$IndexControl]];
  83.     }
  84.  
  85.     $xCodeBar = $TabCode["*"] . $CodeBar . "0" . $TabCode["*"]; //on rajoute * en début et en fin de code
  86.  
  87.     $thumb = imagecreatetruecolor(500, $bc_height); //création de l'image temporaire
  88.     $fond = imagecolorallocate($thumb, 255, 255, 255); // fond
  89.     imagefill($thumb, 0, 0, $fond); // remplissage avec la couleur de fond
  90.     $c_w = imagecolorallocate($thumb, 255, 255, 255); // barre blanche
  91.     $c_b = imagecolorallocate($thumb, 0, 0, 0); // barre noire
  92.     $x_ref = 0;
  93.     for($x=0; $x < strlen($xCodeBar); $x++) { // dessiner le code barre
  94.         if($xCodeBar[$x] == "1") {
  95.             imageline($thumb, $x_ref, 0, $x_ref, $bc_height, $c_b);
  96.         } else {
  97.             imageline($thumb, $x_ref, 0, $x_ref, $bc_height, $c_w);
  98.         }
  99.         $x_ref++;
  100.     }
  101.  
  102.     // Création de l'image définitive
  103.     $IMG = imagecreatetruecolor($x_ref, $bc_height);
  104.     imagefill($IMG, 0, 0, $fond);
  105.     imagecopymerge ($IMG, $thumb, 0, 0, 0, 0, 500, $bc_height, 100 );
  106.  
  107.     header("Content-type: image/png");
  108.     imagepng($IMG);
  109.     imagedestroy($IMG);
  110. }
  111. ?>
  112.  


Pour intégrer l'image du code barre :

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4. <img src="'.$K_url_site.'includes/code39.php?string='.htmlentities($id_a_coder,ENT_QUOTES,"ISO8859-1").'&amp;h=10&amp;control=1" alt="Barcode"/>
  5.  
  6. #####!!!#####
  7. ?>

A noter :
- $K_url_site n'est pas indispensable sauf si vous intégrez le code barre dans un mail (pour une confirmation d'adhésion, par exemple)
- h est en option, il permet de fixer la hauteur de l'image du code barre. Si omis, la hauteur sera de 25px.
- control est en option, il ajoute un caractère supplémentaire pour confirmer que le code est correct. en général ce n'est jamais utilisé !


Exemple d'utilisation dans une page php :
En appuyant sur la touche Echap, une invite attend la lecture du code.
Sur la plupart des lecteurs de code barre, il est possible de paramétrer un envoi automatique du la touche entrée (crlf) en fin de lecture du barcode.

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5. <script language="javascript" type="text/javascript">    
  6.     window.onkeyup = function (event) {
  7.     if (event.keyCode === 27) {
  8.         scan();
  9.     }
  10.  
  11.     function scan() {
  12.         var codeid = prompt("Scannez le code","");
  13.         if (codeid != null) {
  14.             if (isNaN(codeid) == false) {
  15.                 location.href="index.php?mod='.$K_mod.'&ac='.$K_ac.'&sql_action=modif&int_id="+codeid;
  16.             }
  17.         }
  18.     }
  19. </script>
  20.  
  21.  
  22. #####!!!#####
  23. ?>


Enjoy !


Sujet écrit par Fifi69 le mardi 7 janvier 2014 à 19:01

[ Imprimer ] - [ Fermer la fenêtre ]