| |
Le Code 128 a été inventé par Ted Williams de LaserLight Systems et mis sur le marché, en 1981, par la société Computer Identics 1.
| Le code 128 a une longueur variable, c'est un code très dense.
|
| Composition :
| Chaque caractère est composé de 11 modules blanc ou noir. |
| Cependant le caractère STOP est lui composé de 13
modules. |
| Ces 11 modules composent 3 barres et 3 espaces. |
| La largeur de chaque barres et espaces varie de 1 à 4 modules.
|
Voir la table de composition du Code 128 ici
|
| Alphanumérique,
codes des touches de fonctions (F1, F2, etc.) ,
caractères spéciaux (tous les caractères ASCII )
, |
| Il existe 3 jeux de caractères :
| Subset A : majuscules et caractères de contrôle, |
| Subset B : majuscules et minuscules, |
| Subset C : numérique (par paire, 00, 01, 02, etc). |
Les 3 jeux de caractères peuvent être mélangés à
l'intérieur d'un même code.
|
| Il est automatiquement doté d'un checkdigit (caractère de contrôle).
|
Applications :
Calcul du checkdigit d'un Code 128 :
| Le calcul du checkdigit peut se révéler assez ardu :
| Chaque caractère composant un code 128 a une valeur numérique de 0 à 102.
(Voir la table de composition du Code 128) |
| Dans les Subset A et B, la valeur numérique d'un caractère est celle de son code ASCII moins 32.
Ainsi donc, un espace (ASCII 32) a la valeur 0 (zéro), le point d'exclamation (ASCII 33) a la valeur 1, etc. |
| Le Subset A permet l'impression des caractères de contrôle dont le code
ASCII est entre 0 et 31.
Pour ces caractères on ajoute 64 à son code ASCII pour obtenir sa valeur numérique.
Par exemple :
- la valeur de NUL (ASCII 0) est 64,
- SOH (ASCII 1) est 65,
- STX (ASCII 2) est 66 etc.
|
| Le Subset C permet l'impression des chiffres par paire, pour le checksum on
utilise la valeur numérique de celle-ci
(00, 01, 02,...45,...99) |
|
| Pour calculer le Checkdigit, suivre ces étapes :
- Initialiser le variable checkdigit avec la valeur du caractère
"Start" (103, 104 ou 105 pour les Subset A, B ou C respectivement)
- Initialiser un "multiplicateur" à la valeur 1.
- En commençant par la gauche du code, ajouter la valeur
numérique de chaque caractère multipliée par le "multiplicateur" au checkdigit.
Incrémenter le "multiplicateur" après chaque caractère.
- Diviser le résultat par 103. Le reste de la division est le checkdigit.
- Convertir le Checkdigit numérique en caractère ASCII.
|
| Le détail de la conversion du Checkdigit numérique en caractère ASCII varie en
fonction du Subset utilisé.
Une manipulation particulière est requise dans les cas où le code ASCII du caractère
résultant est égal à zéro ou est supérieur à 95. |
De manière générale :
| En Subset A :
- si le Checkdigit est compris entre 0 et 63 (inclus) :
ajouter 32 (code ASCII de l'espace) au Checksum pour obtenir le caractère qui représentera le Checkdigit.
- Si le Checkdigit est égal à 64 ou supérieur :
soustraire 64 pour obtenir le caractère.
|
| En Subset B :
ajouter 32 au Checkdigit pour obtenir le caractère.
|
| En Subset C :
le Checkdigit est la valeur du caractère. |
Note :
- Stephen A. Brown, Revolution at the checkout counter, Cambridge, Mass. Harvard Univ. Press 1997, ISBN 9780674767201
|