Je créé un code barre a 8 chiffres de manière entièrement aléatoire! je ne génère plus ce code en fonction de la date.
Source / Exemple :
<?php
$prefixe = $_GET['pre'];
$numero = $_GET['num'];
$digit = $_GET['dig'];
$codebarre = $prefixe.''.$numero.''.$digit;
// création de l'image
header ("Content-type: image/png");
$image = imagecreate(134,70);
// Définition des couleur dont le blanc est sélectionnée comme couleur de fond
$blanc = imagecolorallocate($image, 255, 255, 255);
$noir = imagecolorallocate($image, 0, 0, 0);
// Calcul de la valeur binaire du code sur 2 set
// Les 4 premier chiffre sur le set A
// Puis les 4 dernier sur le C
$i=0;
while ( $i <8 ) {
// Découpage de la chaine
if ( $i < 4 ) {
$chiffre_set_A = substr($codebarre,$i, 1);
}
if ( $i > 3 ) {
$chiffre_set_C = substr($codebarre,$i, 1);
}
// Calcul de la valeur
// Merci à schtroumf sur PHPCS pour son information!
switch ( $chiffre_set_A ) {
case '0';
$val = '0001101';
break;
case '1';
$val = '0011001';
break;
case '2';
$val = '0010011';
break;
case '3';
$val = '0111101';
break;
case '4';
$val = '0100011';
break;
case '5';
$val = '0110001';
break;
case '6';
$val = '0101111';
break;
case '7';
$val = '0111011';
break;
case '8';
$val = '0110111';
break;
case '9';
$val = '0001011';
break;
}
switch ( $chiffre_set_C ) {
case '0';
$val = '1110010';
break;
case '1';
$val = '1100110';
break;
case '2';
$val = '1101100';
break;
case '3';
$val = '1000010';
break;
case '4';
$val = '1011100';
break;
case '5';
$val = '1001110';
break;
case '6';
$val = '1010000';
break;
case '7';
$val = '1000100';
break;
case '8';
$val = '1001000';
break;
case '9';
$val = '1110100';
break;
}
// inscription de la traduction sur une variable $total
if ( $i == 0 ) {
$total .= '101'.$val;
}
else if ( $i == 4 ) {
$total .= '01010'.$val;
}
else if ( $i == 7 ) {
$total .= $val.'101';
}
else {
$total .= $val;
}
$i++;
}
// On compte le nombre de caractère
$count = strlen($total);
// Ce nombre doit être égale a 67 pour un code barre EAN8
if ( $count == 67 ) {
$j=0;
// Puis on déscine barre par barre
while ( $j < $count ) {
// Dabord on découpe la variable $total octet par octet
$barre = substr($total,$j, 1);
// Variables d'adaptation des barres
$m = $j*2;
$n = $m+2;
// Si les octets sont des séparateurs leurs hauteur est de 60
// sinon la hauteur des barres est de 50
if ( $j <=2 ) {
$hauteur = 60;
}
else if ( $j >31 AND $j < 37 ) {
$hauteur = 60;
}
else if ( $j > 63 ) {
$hauteur = 60;
}
else {
$hauteur = 50;
}
// Si $barre = 1 alors on dessinne une barre noir
// Sinon une barre blanche
if ( $barre == 1 ) {
$coul = $noir;
}
else {
$coul = $blanc;
}
ImageFilledRectangle ($image, $m, 0, $n, $hauteur, $coul);
$j++;
}
// Correction des erreurs de séparateurs
ImageFilledRectangle ($image, 6, 51, 62, 70, $blanc);
ImageFilledRectangle ($image, 74, 51, 100, 70, $blanc);
}
// On découpe ensuite le code en deux
$code1 = substr($codebarre,0, 4);
$code2 = substr($codebarre,4, 4);
// On l'inscrit sur notre image
imagestring($image, 8, 16, 52, $code1, $noir);
imagestring($image, 8, 84, 52, $code2, $noir);
imagepng($image);
?>
Conclusion :
Dite moi ce que vous en pensez!
Je sait que je ne respecte pas les normes W3C Mais ce n'est qu'un exemple pour l'insérer dans un texte parceque sinon ca ne marche pas!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.