French version

The Datamatrix code



This code is part of the family of 2-dimensional codes, it can encode up to 2335 characters on a very small surface. The encoding is done in two stages : first the datas are converted to 8 bits "codeword" (High level encoding) then those are converted to small black and white squares. (Low level encoding) Moreover an error correction system is included, it allows to reconstitute badly printed, erased, fuzzy or torn off datas. In the continuation of this talk, the term "codeword" will be abbreviated to CW and Reed-Solomon code in RS. There are also micro QR codes not studied here.

The general structure.

A 2 x 2 regions code :


Low level encoding.

High level encoding.
La détection et la correction des erreurs.
La création des codes barres.
Maintenant que nous savons créer le motif d'un code barre, il nous reste à le dessiner à l'écran et à l'imprimer sur papier. Deux approches sont possibles : Il semble qu'il n'y ait pas de police gratuite pour codes barre Datamatrix sur le net. J'ai donc décidé de dessiner entièrement cette police et de la proposer en téléchargement. Puisque chaque symbole a un nombre pair de lignes et un nombre pair de colonnes, je met dans chaque caractère de la police 4 modules (2 lignes et 2 colonnes). De cette manière nous avons 16 combinaisons assignées aux 16 premières lettres majuscules.
Si nous donnons une valeur à chaque point de cette matrice de 2 X 2 comme ceci :
1 2 4 8
la valeur ASCII du caractère associé à une matrice donnée est la somme des valeurs de chaque point + 65 (65 = A = pas de point, tout blanc !)
La police " datamatrix.ttf "
Cette police contient les 16 caractères A (ASCII : 65) à P (ASCII : 80)

Copiez ce fichier dans le répertoire des polices, le plus souvent : \Windows\Fonts

Encodage d'un code datamatrix.

Le programme devra se dérouler en 4 étapes : Du fait de l'interaction entre les différents modes de compression il est difficile de faire une optimisation à 100%. Le programme va donc décomposer la chaine en "blocs" de type "numérique", "texte" ou "octet" puis il repassera certains blocs dans un autre mode si la surcharge dûe aux MC de commutation est supérieure au gain de compression. On ne pourra pas tenir compte de tous les paramètres tels les rembourrages ...

Un petit programme pour tester tout ça.

Voici un petit programme écrit en Visual Basic 6 ; le
fichier d'installation copiera le programme,
les dépendances Visual Basic, les fichiers sources et la police.

Fichier d'auto-installation :

Fichier ZIP sans installation :

La fonction Datamatrix$ fait plus de 750 lignes, je ne la reproduis donc pas ici, il suffit de la récuperer dans le fichier "form1.frm" qui se trouve avec le programme ci-dessus ; avec le programme d'auto-installation le fichier "form1.frm" se trouve dans le répertoire du programme, sous-répertoire "sources".

La fonction s'appelle de la manière suivante : resultat$ = Datamatrix$(Chaine$, Dimension%, Type%, CodeErr%)
Les trois derniers paramètres sont optionnels et sont passés par références; au retour ils contiennent les valeurs réellement utilisées. Valeurs de CodeErr% au retour de la fonction : Il suffit maintenant d'afficher ou d'imprimer la chaine resultat$ avec la police datamatrix par exemple dans un traitement de texte. Les utilisateurs d'Office pourront même intégrer la fonction Datamatrix$ dans une macro afin d'automatiser le traitement. Pour arriver à effectuer tous les traitements dans une unique fonction, j'ai dû utiliser des "Gosub" au lieu de fonctions avec paramètres; j'entends déjà les esthètes de la programmation hurler au sacrilège.


Do you like this page ?

Is it useful for you ?
Click here !