DIVERS | COUNTERSTRIKE - 3 |
Les Code-barres (Raffaelo) |
Réflexions
Si vous avez déjà observé attentivement un code barre, vous avez sûrement remarqué que le même chiffre n'est pas toujours codé par la même série de barres...
Ensuite, les gens pensent souvent que le prix est inscrit dans le code barre, ce qui est totalement faux ! Si on réfléchit un peu, on se rend compte que le code barre est différent pour chaque produit (deux produits différent de même prix n'on pas le même code)
Et comment font les caisses pour afficher la désignation du produit sur l'écran et sur le ticket ? Le code barre doit être unique pour chaque produit et ne contient aucune information : c'est seulement un nombre... Alors, quand on passe à la caisse, le lecteur optique déchiffre et envoie le code à la machine, qui consulte une énorme base de donnée qui contient la description et le prix associé à chaque code.
C'est très pratique, et c'est pour ça que le code barre à été créé. Pour changer le prix d'un produit, il n'y a pas besoin de changer toutes les étiquettes des boîtes concernées (comme dans une petite épicerie par exemple), il suffit de changer le prix dans la base de donnée ! Autre avantange, on embrouille le client qui est censé ne rien comprendre aux codes barres. Enfin, ça doit servir à gérer les stocks en enregistrant les quantités de tel ou tel produit vendu...
ThéorieBon, alors, je commence par où... EAN veut dire European Article Numbering system, et le 13 signifie que le code a 13 chiffres ! Cette norme est utilisée en Europe et un peu partout dans le monde. Par contre, aux USA, ils utilisent la norme UPC qui signifie Universal Product Code... On va bien sûr parler de la norme utilisée en France plus particulièrement, qui est la même partout en Europe. Prenez n'importe quel objet, et vous verrez ces petites barres sur le paquet, ou la couverture,etc. sauf pour les magazines et journaux qui utilisent une autre norme mais qui ne fait pas l'objet de ce tut.
Alors, les codes barres sont composés de barres et de chiffres. Les barres sont la transcription des chiffres pour que le lecteur optique puisse lire le code. Les chiffres servent juste aux humains et ne sont d'aucune utilité pour la machine, incapable de reconnaître les chiffres. Donc, il y a 13 chiffres, et chaque chiffre est codé par 7 barres verticales. Ces barres sont soit blanches, soit noires. La machine ne comprend que des 0 ou des 1, alors le blanc code 0 et noir 1. Les chiffres sont séparés en 3 groupes par des barres plus longues. Le premier chiffre est tout seul à l'éxtérieur des barres à gauche, alors que les autres sont regroupés par 6 à l'intérieur des barres. Le premier chiffre n'est pas codé par des barres.
Chaque code barre a 13 valeurs, des chiffres de 0 à 9, #0 à #12. #0 et #1 indiquent l'origine du produit, #2-#11 donnent le code de l'article et #12 (le 13e et dernier) est une somme de contrôle (checksum) qui vérifie la validité des autres valeurs.
Voici les 4 étapes du calcul de #12 :
Les codes barres ont des zones vides blanches tout autour, en général 10 fois la largeur d'une petite barre. Ces zones sont indispensables, et sans elles, le code peut être illisble. Ensuite, il y a 3 groupes de barres noir/blanc/noir de chaque côté du code et au milieu. Les barres sont plus longues que les autres et dépassent vers le bas. Elles servent au lecteur à se caler et s'adapter à la taille du code barre.
Voici maintenant la partie magique. Accrochez-vous bien... Je vous avais dit que le même chiffre n'est pas forcément codé par les mêmes barres, et ben c'est normal : ça a été fait pour que le consommateur n'y comprenne rien, et voici comment ça marche : les codes barres utilisent différent jeux de caractères pour représenter les valeurs de 0 à 9. Cela devrait rendre impossible pour les gens de comprendre ce qui se passe, comme d'hab, dans cette société, les esclaves n'ont pas besoin de s'inquiéter du fonctionnement des choses.Voici les codes graphiques des 3 jeux de caractères :
Valeur | Code A | Code B (xor C) | Code C (not A) |
0 | 0001101 (13) | 0100111 (39) | 1110010 (114) |
1 | 0001101 (25) | 0110011 (51) | 1100110 (102) |
2 | 0011001 (19) | 0011011 (27) | 1101100 (108) |
3 | 0010011 (61) | 0100001 (33) | 1000010 (66) |
4 | 0100011 (35) | 0011101 (29) | 1011100 (92) |
5 | 0110001 (49) | 0111001 (57) | 1001110 (78) |
6 | 0101111 (47) | 0000101 (05) | 1010000 (80) |
7 | 0111011 (59) | 0010001 (17) | 1000100 (68) |
8 | 0110111 (55) | 0001001 (09) | 1001000 (72) |
9 | 0001011 (11) | 0010111 (23) | 1110100 (116) |
Les barres plus longues des bords sont représentés par 101 et celle du centre par 01010.
Ensuite, ce n'est pas finit ! Les chiffres à gauche de la barre du milieu et ceux à droite n'utilisent pas les mêmes jeux de caractères... La première moitié du code barre (à gauche) est codée avec les jeux A et B, alors que la deuxième moitié (à droite) est codée uniquement avec le jeu C. En plus, les jeux A et B sont utilisé avec une combinaison qui dépend de la valeur du premier chiffre du code barre, #0 :
Valeur de #0 | #1 | #2 | #3 | #4 | #5 | #6 |
0 | A | A | A | A | A | A |
1 | A | A | B | A | B | B |
2 | A | A | B | B | A | B |
3 | A | A | B | B | B | A |
4 | A | A | B | B | B | A |
5 | A | B | B | A | A | B |
6 | A | B | B | B | A | A |
7 | A | B | A | B | A | B |
8 | A | B | A | B | B | A |
9 | A | B | B | A | B | A |
Ah, les stupides consommateurs ne comprendrons jamais pourquoi les mêmes valeurs donnent des barres différentes ! Rien n'est aussi fiable que les codes barres ! =°]. Nous allons voir concrêtement maitenant comment déchiffrer un code barre...
Prenons comme
exemple le livre Assembleur de chez Marabout. Le code est 9 782501
011761
. Alors, on a 9 78
donc c'est un livre. Le premier
chiffre est 9
donc la combinaison des jeux de caractères
A et B pour les valeurs #1 à #6 est ABBABA
, et pour les
valeurs #7 à #12, c'est toujours CCCCCC
. La somme des chiffres
en position impaire est 9 + 8 + 5 + 1 + 1 + 7 = 31
, et la somme
des chiffres en position paire multipliée par 3 est (7 + 2 + 0
+ 0 + 1 + 6) x 3 = 48
. Ensuite, 31 + 48 = 79
et donc 79
(mod 10) = 9
. Enfin, comme 9 est différent de 0 (si si, j'vous
jure...), on fait 10 - 9 = 1
et le dernier chiffre, la somme de
contrôle, est 1.
Deuxième
exemple, on prend le livre Accéder à tout l'internet par e-mail,
de chez Marabout aussi. On a le code, et on voudrait générer les
barres... Le code est 9 782501 031752
. On regarde le premier chiffre,
qui est un 9, et on jette un coup d'oeil dans le petit tableau. La combinaison
est donc ABBABA CCCCCC
. On fait afficher le 9 à gauche des
barres, puis la longue barre à gauche : 101
mais qui dépasse
vers le bas. Ensuite, on va coder les 6 premiers chiffres #1 à #6 : on
regarde dans le premier tableau. #1 est codé avec le jeu A, est c'est
un 7, donc ça donne 0111011
. #2 est un 8, mais il est codé
avec le jeu B, donc il faut mater dans la deuxième colonne : 0001001
...etc...#6
est un 1, et il est codé avec le jeu A, donc on a 0001101
.
Maintenant qu'on a transcri les chiffres en barres, on affiche toutes les traductions
en 0 et 1 à la suite. Lorsqu'on a un 0, on affiche une barre blanche,
et quand c'est un 1, c'est une barre noire. On affiche alors les barres de #1
à #6 ce qui donne 011101100010010011011011000101001110001001
pour la première moitié. Ensuite on fait afficher la longue barre
du milieu : 01010
, puis on continue avec les 6 derniers chiffres.
Enfin, on fait afficher la longue barre à droite : 101
et
on affiche les chiffres sous le code barre. Surtout, il ne faut pas oublier
les espaces vierges blancs tout autour du code barre. Et voilà, on peut
construire n'importe quel code barre à partir des chiffres !
Ben maintenant que vous savez la théorie, la pratique ne devrait pas poser de problème particulier... Vous savez déchiffrer et générer les codes barres, alors ça devrait aller. Je vais quand même vous donner quelques petits conseils.
D'abord, vous n'allez pas faire vos codes à la main ! Il vous faut un logiciel... Il y en a un inclu dans Corel Draw 8 (même dans la version démo) qui fait des codes dans pas mal de normes, mais vous pouvez aussi chercher sur internet. Pour vous épargner du temps, je vous dit quand même comment ils s'appellent : AnyLabel (pour étiquettes mais fait aussi les codes barres dans plusieurs normes) et CodeBar (uniquement des codes barres EAN 13). Je vous apprend pas à chercher efficacement, vous devriez savoir... Si vous savez chercher par e-mail, c'est encore mieux.
Sinon, ce qui est franchement le mieux, c'est de programmer son propre logiciel de code barres dans votre langage préféré. Si vous ne savez pas programmer, faites en un en Visual Basic en très peu de temps, le VB est très nul, fait des programmes lents et gros mais c'est facile... Personnellement, j'en ai fait un sur ma calculatrice (j'avais pas accès à l'ordinateur quand je l'ai fait), la TI-89. Pour l'imprimer, je connecte la TI-89 à l'ordinateur et je fait une capture d'écran. Je vais bientôt en faire un en Delphi aussi, quand j'aurai le temps...
Voilà,
maintenant vous avez fait un code barre et vous l'avez imprimé sur une
étiquette autocollante, et vous vous demandez bien s'il marche... Pas
d'inquiétude à avoir ! Les lecteurs optiques ont une grande tolérance
: ils doivent reconnaître les codes barres très différents
sur chaque produit ! Certains sont petits, d'autres gros, certains hauts et
fins, d'autres déformés parce qu'ils sont collés sur des
bouteilles rondes... Il reconnaîtraient même les codes barres vert
et rouge fluo avec des chiffres écrits à la main, mais c'est pas
très discret pour passer à la caisse ! Une fois que vous avez
imprimé un code barre, passez le sur une borne information
au supermarché. Ca marche à chaque fois, mais il vaut mieux vérifier
quand même, et ça rassure...
Ensuite, essayez le code barre sur le produit qu'il désigne et passez à la caisse avec. La caissière ne devrait rien remarquer, et il n'y a pas d'inquiétude à avoir du côté du lecteur optique. Franchement, la caissière qui passe toute sa journée à faire défiler des produits ne devrait pas se rendre compte qu'un code barre a été collé par dessus le vrai. Normalement, les vrais sont directement imprimés sur l'emballage. Si jamais elle remarquait (très improbable) quelque chose, personne ne peut savoir que c'est vous qui avez collé l'étiquette par dessus. Comment un simple consommateur saurait comment les codes barres marchent ? Il y a eu une erreur, et vous avez simplement pris la mauvaise boîte dans le rayon...
Ensuite, vous pouvez passer aux choses sérieuses : vous trouvez un bon livre, mais bien cher. Qu'à cela ne tienne : vous cherchez un livre moins cher, et vous relevez son code barre. Vous rentrez chez vous et vous imprimez une étiquette avec le code barre du livre pas cher. Vous retournez au magasin et collez l'étiquette sur le livre cher qui vous intéresse. Vous paierez le livre cher au prix du pas cher ! C'est bien sûr illégal, mais vous prenez vos responsabilité, et de toute façon, vous n'êtes pas au courant des codes barres, hein ? ;-]
Autre chose, ne collez pas le code barre d'un livre sur une bouteille de champagne ! Débrouillez-vous pour trouver une bouteille de champagne moins cher que celle que vous désirez... La seule chose est que les deux produits doivent avoir presque la même description sur l'écran de la caisse pour ne pas attirer l'attention. Dernier conseil : ne changez qu'un code barre à la fois, et achetez quelques autres articles avec... C'est tout, vous voilà savant !
Le mot de la finBen j'espère que vous avez pas eu trop de mal à suivre ce tut inhabituel, parce que j'ai eu un peu de mal à expliquer et à organiser mes idées. Si je n'ai pas été assez clair sur un point, envoyez-moi un message, et je me ferais un plaisir de vous répondre... Ca fait toujours plaisir de savoir qu'on n'a pas passé du temps pour rien, et que ça sert à quelqu'un.
Bon, peut-être que je parlerai dans un prochain tutorial des codes barres des magazines, mais pour l'instant, je sais pas trop comment ça marche... mais je vais les étudier ! Comme je répète souvent, il faut avoir l'esprit libre, cracker dans la vie de tous les jours... Pour moi cracker ne signifie pas pirater ni illégal, mais apprendre et comprendre.
Allez, à + et bon crack !
Ecrivez-moi à raffaelo@ifrance.com pour vos critiques, compliments, conseils, autres méthodes, demande d'éclaircissement, demande de crack sur un programme particulier...