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éorie

Bon, 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 !

Pratique

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 fin

Ben 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...