Code bare!!!

Soyez le premier à donner votre avis sur cette source.

Vue 14 273 fois - Téléchargée 652 fois

Description

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!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

toutoos
Messages postés
56
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
17 octobre 2009

Parce que dessnner des barres blanches sur fond blanc semble plus logique.

Mais pour le lecteur je tourne en rond autour de la question et jme demande comment pourrait je faire!
cs_GRenard
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
Ce code suit-il un standard? je ne crois pas pouvoir le lire avec un lecteur n'est-ce pas?

Merci schtroumf d'avoir fait un lien vers ma source :) C'est gentil...

Mais moi aussi je fais du drawing de barre blanche sur fond blanc :D
toutoos
Messages postés
56
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
17 octobre 2009

J'ai opté our le switch je ne sait pas pourquoi! Pour le array je ne sais pas encore! Je vais y réfléchir! et pour la case c'est une petite erreur que je vais corriger rapidement!
cs_schtroumf
Messages postés
59
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
22 juillet 2008

Salut,
Je pense que tu aurais pu te dispenser des switch avec un code dans ce genre d'autant que faire un switch sur une variable non définie doit sûrement poser quelques problèmes si on est en E_ALL ;)

if(isset($chiffre_set_A))
{
$val_a = array('0001101','0011001','0010011','0111101','0100011','0110001','0101111','0111011','0110111','0001011');
$val = $val_a[$chiffre_set_A];
}
else
{
$val_c = array('1110010','1100110','1101100','1000010','1011100','1001110','1010000','1000100','1001000','1110100');
$val = $val_c[$chiffre_set_C];
}

Normalement les case prennent ":" à la fin et pas ";" ;)
toutoos
Messages postés
56
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
17 octobre 2009

Mon petit code est presque fini! Mais après avoir fini je vous demande votre avis puis j'en fait une joulie fonction!!!

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.

Du même auteur (toutoos)