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
-
<?php
/* GENERER UN CODE BARRE CODE 39 AVEC PHP/GD
* Source : http://thierry-godin.developpez.com/, Correction : Fifi69
* Uploader dans includes
* echo "<img src='includes/code39.php?string=" . htmlentities($string_a_coder,ENT_QUOTES,"ISO8859-1") . "&h=25&control=1'/>";
* h et control sont optionnels
*************************************/
-
//Vérification des paramètres passés par l'URL
if(isset($_GET['string'])) {
//$TheString = preg_replace('¤[^0-9A-Z. $/+%*-]¤', '', strtoupper($_GET['string']));
$TheString = preg_replace('[^0-9A-Z. $/+%*-]', '', strtoupper($_GET['string']));
$bc_height = 20; // Hauteur des barres par defaut
if(isset($_GET['h'])) {$bc_height = $_GET['h'];}
-
// tableau Char -> Code
$TabCode = array(
'0' => '101000111011101',
'1' => '111010001010111',
'2' => '101110001010111',
'3' => '111011100010101',
'4' => '101000111010111',
'5' => '111010001110101',
'6' => '101110001110101',
'7' => '101000101110111',
'8' => '111010001011101',
'9' => '101110001011101',
'A' => '111010100010111',
'B' => '101110100010111',
'C' => '111011101000101',
'D' => '101011100010111',
'E' => '111010111000101',
'F' => '101110111000101',
'G' => '101010001110111',
'H' => '111010100011101',
'I' => '101110100011101',
'J' => '101011100011101',
'K' => '111010101000111',
'L' => '101110101000111',
'M' => '111011101010001',
'N' => '101011101000111',
'O' => '111010111010001',
'P' => '101110111010001',
'Q' => '101010111000111',
'R' => '111010101110001',
'S' => '101110101110001',
'T' => '101011101110001',
'U' => '111000101010111',
'V' => '100011101010111',
'W' => '111000111010101',
'X' => '100010111010111',
'Y' => '111000101110101',
'Z' => '100011101110101',
'-' => '100010101110111',
'.' => '111000101011101',
' ' => '100011101011101',
'$' => '100010001000101',
'/' => '100010001010001',
'+' => '100010100010001',
'%' => '101000100010001',
'*' => '100010111011101'
);
-
// convertir la chaine en code
$CodeBar = '';
$TabKeys = array_keys($TabCode); // tableau des caractères seuls
$TotalChar = 0;
for($i = 0; $i < strlen($TheString); $i++) {
$CodeBar .= "0".$TabCode[$TheString[$i]];
//récupération de l'index du caractère + calcul de la somme des index
foreach($TabKeys as $key => $value) {
if($value === $TheString[$i]){ $TotalChar += $key;}
}
}
-
if($_GET['control'] == "1") { //ajouter le caratère de controle
$IndexControl = bcmod($TotalChar, 43); //calculer le caractère de controle
$CodeBar.= "0" . $TabCode[$TabKeys[$IndexControl]];
}
-
$xCodeBar = $TabCode["*"] . $CodeBar . "0" . $TabCode["*"]; //on rajoute * en début et en fin de code
-
$thumb = imagecreatetruecolor(500, $bc_height); //création de l'image temporaire
$fond = imagecolorallocate($thumb, 255, 255, 255); // fond
imagefill($thumb, 0, 0, $fond); // remplissage avec la couleur de fond
$c_w = imagecolorallocate($thumb, 255, 255, 255); // barre blanche
$c_b = imagecolorallocate($thumb, 0, 0, 0); // barre noire
$x_ref = 0;
for($x=0; $x < strlen($xCodeBar); $x++) { // dessiner le code barre
if($xCodeBar[$x] == "1") {
imageline($thumb, $x_ref, 0, $x_ref, $bc_height, $c_b);
} else {
imageline($thumb, $x_ref, 0, $x_ref, $bc_height, $c_w);
}
$x_ref++;
}
-
// Création de l'image définitive
$IMG = imagecreatetruecolor($x_ref, $bc_height);
imagefill($IMG, 0, 0, $fond);
imagecopymerge ($IMG, $thumb, 0, 0, 0, 0, 500, $bc_height, 100 );
-
header("Content-type: image/png");
imagepng($IMG);
imagedestroy($IMG);
}
?>
-
Pour intégrer l'image du code barre :
Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
<?php
#####!!!#####
-
<img src="'.$K_url_site.'includes/code39.php?string='.htmlentities($id_a_coder,ENT_QUOTES,"ISO8859-1").'&h=10&control=1" alt="Barcode"/>
-
#####!!!#####
?>
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
<?php
#####!!!#####
-
-
<script language="javascript" type="text/javascript">
window.onkeyup = function (event) {
if (event.keyCode === 27) {
scan();
}
-
function scan() {
var codeid = prompt("Scannez le code","");
if (codeid != null) {
if (isNaN(codeid) == false) {
location.href="index.php?mod='.$K_mod.'&ac='.$K_ac.'&sql_action=modif&int_id="+codeid;
}
}
}
</script>
-
-
#####!!!#####
?>
Enjoy !