Les chaînes de caractères

De $1

Support de cours 

Le code 39

Définition

Le code 39 est un encodage utilisé (notamment sur les médicaments) pour représenter par un code à barres un message alphanumérique. Ce codage permet de représenter 43 caractères : les 26 majuscules, les 10 chiffres et 7 caractères de ponctuation. Le caractère '*' est réservé pour marquer le début du codage et la fin.

Chaque caractère est codé à l'aide de 9 symboles, 5 barres et 4 espaces. Parmi ces symboles certains sont larges et d'autres sont étroits. Pour chaque caractère, exactement 3 symboles sont larges et les 6 autres sont étroits. D'où le nom !

On veut proposer une implantation en Java pour le code 39.

Modèle

Proposer une énumération Epaisseur qui encode les épaisseur d'un symbole : LARGE ou ETROIT. Cette énumération sera responsable de tous les aspects liés à l'épaisseur, notamment le fait qu'un symbole LARGE est entre 2 et 3 fois plus épais qu'un symbole ETROIT. Elle offrira également une opération pour dessiner le symbole dans un Graphics. Il s'agit simple de dessiner un rectangle plein noir ou blanc. On notera cependant que même si on ne connaît pas la couleur, on devrait pouvoir dessiner une rectangle de la bonne largeur et hauteur en supposant que la couleur est la bonne.

Proposer une énumération Nature qui encode la nature des symboles : BARRE ou ESPACE. Cette énumération sera responsable de gérer la couleur (noire ou blanche). L'énumération possèdera une méthode pour affecter une couleur à un Graphics (cf. méthode setColor). 

Proposer une classe Symbole qui combine l'épaisseur et la nature. Quand on dessine un symbole, il faut choisir la couleur en fonction de la nature puis dessiner le motif.

Chaque caractère est codé par 9 symboles. Pour un caractère donné, on utilisera une chaîne de caractères pour code les 9 symboles à utliiser. Par exemple, pour l'étoile on utilisera la chaîne "010010100". Une barre étroite (0), un espace large (1), une barre étroite (0), un espace étroit (0), une barre large (1), ... Pour une chaîne de 9 caractères donnée, on va itérer pour découvrir les neuf symboles associés. On pourra proposer une classe IterateurSymbole initialisée à la construction avec une chaîne de 0 et de 1. Elle aura une méthode terminee() qui renvoie true s'il n'y a pas plus de symboles et false sinon. Sa méthode suivant() construira un symbole suivant en fonction du caractère encodé.  

Tester ces classes en créant une Applet qui itère sur le code de l'étoile, génére les 9 symboles et les dessine.

Table d'encodage

Il s'agit maintenant d'encoder chacun des 43 caractères supportés par le code 39. Proposer une classe Code 39 qui fait exactement cela. On pourra par exemple avoir un tableau static de chaînes de caractères. Chaque élément du tableau contient la chaîne de 0 et de 1 qui correspond à un caractère. 

Proposer une méthode qui, selon un caractère donné, renvoie le chaîne de 0 et de 1 qui correspond.

Proposer une autre méthode qui étant donné un message alphanumérique, construit une chaîne de 0 et de 1 qui est la concaténation de toutes les chaînes correspondant à chaque caractère. Ne pas oublier d'ajouter une étoile en début et en fin du message.

Ajouter une méthode paint qui prend un Graphics et dessine les symboles correspondant à un message.

Test

Pour tester vos classes, créer une Applet et dessine le code à barres correspondant en fonction du message que vous aurez choisi.

Si vous avez un smartphone, vous pouvez l'utiliser pour tester que votre programme fonctionne. S'il fonctionne avec l'image ci-dessous alors il devrait fonctionner en scannant le résultat de votre programme.

JAVA2012.PNG

Bonus: Les codes EAN 8 et 13

Vous pouvez appliquer la même technique pour encoder les codes EAN-8 et EAN-13. Ces deux codes ont suffisamment de points communs pour faire l'objet d'une étude globale. Certaines des classes du Code39 peuvent également être réutilisées.

Mots clés:
 
Images (1)
Voir 1 - 1 sur 1 images | Voir tout
Code 39 de la chaîne JAVA 2012
Code 39 de la chaîne JAVA 2012
JAVA2012....  Actions
Commentaires (0)
Vous devez être connecté pour poster un commentaire.