La composition du DataMatrix se fait en deux étapes :
Le code comporte un système de correction des erreurs qui permet de reconstituer des données mal imprimées, effacées, tachées, floues ou manquantes.
Exemple :(dimension de la zone) x (nombre de zones)
taille de lamatrice : (32x32)(16x16) x (2x2)
au nombre de cellules de la matrice divisé par 8 (sans partie décimale).
Taille du symbole
Lignes x ColonnesNombre de
zones de données
(H x V)Nombre de
CodeWords
de Reed SolomonNombre
de
blocs Symboles carrés10x10 1 5 1 12x12 1 7 1 14x14 1 10 1 16x16 1 12 1 18x18 1 14 1 20x20 1 18 1 22x22 1 20 1 24x24 1 24 1 26x26 1 28 1 32x32 2x2 36 1 36x36 2x2 42 1 40x40 2x2 48 1 44x44 2x2 56 1 48x48 2x2 68 1 52x52 2x2 2 x 42 2 64x64 4x4 2 x 56 2 72x72 4x4 4 x 36 4 80x80 4x4 4 x 48 4 88x88 4x4 4 x 56 4 96x96 4x4 4 x 68 4 104x104 4x4 6 x 56 6 120x120 6x6 6 x 68 6 132x132 6x6 8 x 62 8 144x144 6x6 10 x 62 8 Symboles rectangulaires8x18 1 7 1 8x32 2 11 1 12x26 1 14 1 12x36 1x2 18 1 16x36 1x2 24 1 16x48 1x2 28 1
*Bytes/CW:Bytes/CodeWord
Mode de compression Données à encoder Taux de compression
en Bytes/CW*ASCII Caractères ASCII 0 à 127 1 ASCII étendu Caractères ASCII 128 à 255 0.5 ASCII numérique Chiffres ASCII 2 C40 Majuscules alphanumériques 1.5 TEXT Minuscules alphanumériques 1.5 X12 ANSI X12 1.5 EDIFACT Caractères ASCII 32 à 94 1.33 BASE 256 Caractères ASCII 0 à 255 1
CodeWords Donnée ou fonction 1 à 128 Données ASCII 129 Remplissage 130 à 229 Paire de chiffres: 00 à 99 230 Passage en mode C40 231 Passage en mode Base 256 232 Caractère FNC1 233 Structure de symboles multiples 234 Programmation du lecteur 235 Passage en ASCII étendu pour un caractère 236 Macro 237 Macro 238 Passage en mode ANSI X12 239 Passage en mode TEXT 240 Passage en mode EDIFACT 241 Caractère E.C.I. 254 Si le mode ASCII est en cours:
Si un autre mode est en cours: Fin des données, les CodeWords qui suivent
sont des CodeWords de remplissage.
Passage en mode ASCII ou Fin des données
Algorithme "253-state" :
Soit P le nombre de CodeWords depuis le début des données,
R un nombre pseudo aléatoire et
CW le CodeWord de remplissage requis.
La formule est :R = ((149 * P) MOD 253) + 1
CW = (129 + R) MOD 254Le mode ASCII :
Ce mode utilise 3 méthodes pour coder les caractères :
- Caractères ASCII dans l'intervalle 0 à 127
CodeWord = "valeur ASCII" + 1
- Caractère ASCII étendu dans l'intervalle 128 à 255
Un premier CodeWord de valeur 235 et un second CodeWord avec la valeur:
"valeur ASCII" - 127
- Paire de chiffres 00, 01, 02 ..... 99
CodeWord = "valeur numérique de la paire de chiffres" + 130Modes C40, TEXT et X12 :
Les modes C40 et TEXT sont similaires:
seules les majuscules et les minuscules sont inversées.
- Dans ces modes, 3 caractères de données sont compressés dans 2CodeWords.
- Dans les modes C40 et TEXT 3 caractères spéciaux (Shift) permettent de sélectionner un autre jeu de caractères pour le caractère suivant.
- La valeur sur 16 bits d'une paire deCodeWord est calculée de la manière suivante :
Valeur = C1 * 1600 + C2 * 40 + C3 + 1avec C1, C2 et C3 les valeurs des 3 caractères à compresser.
- Le CodeWord 254 indique un retour au mode ASCII sauf si ce mode permet de remplir totalement le symbole.
- Dans les modes C40 et TEXT un caractère de remplissage de valeur 0 peut être ajouté aux deux derniers caractères afin de former une paire deCodeWords.
- S'il ne reste à coder qu'un seul caractère en mode C40 ou TEXT ou 2 caractères en mode X12; il(s) doit(vent) être codé(s) en mode ASCII mais s'il ne reste qu'un seul CodeWord de libre dans le symbole avant les données de correction, on considère que ce CodeWord est codé dans le mode ASCII sans utiliser le CodeWord 254.
- Le caractère "Upper-Shift" permet de coder un caractère ASCII étendu.
Valeur Jeu de base
pour C40Jeu de base
pour TEXTJeu
Shift 1Jeu
Shift 2Jeu
Shift 3
pour C40Jeu
Shift 3
pour TEXTJeu
pour X1200 Shift 1 Shift 1 NUL (0) ! (33) ‘ (96) ‘ (96) CR (13) 01 Shift 2 Shift 2 SOH (1) " (34) a (97) A (65) * (42) 02 Shift 3 Shift 3 STX (2) # (35) b (98) B (66) > (62) 03 Espace (32) Espace (32) ETX (3) $ (36) c (99) C (67) Espace (32) 04 0 (48) 0 (48) EOT (4) % (37) d (100) D (68) 0 (48) 05 1 (49) 1 (49) ENQ (5) & (38) e (101) E (69) 1 (49) 06 2 (50) 2 (50) ACK (6) ' (39) f (102) F (70) 2 (50) 07 3 (51) 3 (51) BEL (7) ( (40) g (103) G (71) 3 (51) 08 4 (52) 4 (52) BS (8) ) (41) h (104) H (72) 4 (52) 09 5 (53) 5 (53) HT (9) * (42) I (105) I (73) 5 (53) 10 6 (54) 6 (54) LF (10) + (43) j (106) J (74) 6 (54) 11 7 (55) 7 (55) VT (11) , (44) k (107) K (75) 7 (55) 12 8 (56) 8 (56) FF (12) - (45) l (108) L (76) 8 (56) 13 9 (57) 9 (57) CR (13) . (46) m (109) M (77) 9 (57) 14 A (65) a (97) SO (14) / (47) n (110) N (78) A (65) 15 B (66) b (98) SI (15) : (58) o (111) O (79) B (66) 16 C (67) c (99) DLE (16) ; (59) p (112) P (80) C (67) 17 D (68) d (100) DC1 (17) < (60) q (113) Q (81) D (68) 18 E (69) e (101) DC2 (18) = (61) r (114) R (82) E (69) 19 F (70) f (102) DC3 (19) > (62) s (115) S (83) F (70) 20 G (71) g (103) DC4 (20) ? (63) t (116) T (84) G (71) 21 H (72) h (104) NAK (21) @ (64) u (117) U (85) H (72) 22 I (73) I (105) SYN (22) [ (91) v (118) V (86) I (73) 23 J (74) j (106) ETB (23) \ (92) w (119) W (87) J (74) 24 K (75) k (107) CAN (24) ] (93) x 120) X (88) K (75) 25 L (76) l (108) EM (25) ^ (94) y (121) Y (89) L (76) 26 M (77) m (109) SUB (26) _ (95) z (122) Z (90) M (77) 27 N (78) n (110) ESC (27) FNC1 { (123) { (123) N (78) 28 O (79) o (111) FS (28) | (124) | (124) O (79) 29 P (80) p (112) GS (29) }(125) }(125) P (80) 30 Q (81) q (113) RS (30) Upper-Shift ~ (126) ~ (126) Q (81) 31 R (82) r (114) US (31) DEL (127) DEL (127) R (82) 32 S (83) s (115) S (83) 33 T (84) t (116) T (84) 34 U (85) u (117) U (85) 35 V (86) v (118) V (86) 36 W (87) w (119) W (87) 37 X (88) x 120) X (88) 38 Y (89) y (121) Y (89) 39 Z (90) z (122) Z (90) Exemple :
Soit la séquence à coder en mode C40 : Gm
Selon le tableau ci-dessus :
- G à la valeur: 20,
- passage en jeu Shift 3 (pour coder le m minuscule): 02,
- m à la valeur: 13.
En appliquant la formule citée plus haut :
20* 1600 + 02* 40 + 13 + 1 =32'094La séquence est donc: 125, 94
CodeWord1= 32' 094 \ 256 = 125
CodeWord2= 32' 094 MOD 256 = 94Les caractères étendus sont codés comme suit :
- Générer le code "01" pour passer en jeu 2, puis le code 30 qui est le code "Upper-Shift".
- Soustraire 128 de la valeur ASCII du caractère à encoder; on obtient un caractère non étendu.
- Encoder normalement ce caractère en changeant si besoin de jeu.
Exemple en C40 :
Caractère £ (ASCII 163):
163 - 128 = 35 soit "V", ligne 35 du jeu de base.
Séquence : 01 30 35
Caractère ç (ASCII 231):
231 - 128 = 103 soit "g", ligne 7 du jeu "shift 3".
Séquence : 01 30 103
Mode EDIFACT :
Dans ce mode 4 caractères de données sont compressés dans 3 CodeWords.
Chaque caractère EDIFACT est codé sur 6 bits qui sont les 6 derniers bits de la valeur ASCII.
- La valeur sur 24 bits des trois CodeWords est calculée de la manière suivante :
Valeur = C1 * 262'144 + C2 * 4'096 + C3 * 64 + C4
avec C1, C2, C3 et C4 les valeurs des 4 caractères à compresser.
Valeur
EDIFACTValeur
ASCII
du caractèreCommentaire 00 à 30 64 à 94 Valeur EDIFACT = valeur ASCII - 64 31 Fin des données, retour au mode ASCII 32 à 63 32 à 63 Valeur EDIFACT = valeur ASCII Exemple:
Soit la séquence à coder en mode EDIFACT : GOM1
Selon le tableau ci-dessus :
- G à la valeur: 07,
- O à la valeur: 15,
- M à la valeur: 13 et
- 1 à la valeur: 49En appliquant la formule citée plus haut:
07* 262'144 + 15* 4'096 + 13* 64 + 49 = 1'897'329
CodeWord1= 1'897'329 \ 65'536 = 28
CodeWord2= ( 1'897'329 MOD 65'536 ) \ 256 = 243
CodeWord3= 270' 561 MOD 256 = 113
La séquence est donc: 28, 243, 113
Mode "Base 256" :
Ce mode permet de coder n'importe quel Byte.
Après le CodeWord 231 qui commute en mode "base 256", on place un champ longueur, ce champ se compose d'un ou deux Bytes.Soit :
L le nombre de CodeWords qui restent dans le symbole et
N le nombre de données à encoder :
Si L < 250 un seul Byte est utilisé, sa valeur est N (de 0 à 249)
Si L >= 250 deux Bytes sont utilisés :
- la valeur du premier est :
( N \ 250 ) + 249 (Valeurs de 250 à 255) et
- la valeur du second est :
N MOD 250 (Valeurs de 0 à 249).
De plus, chaque CodeWord (incluant le champ de longueur) doit être calculé en utilisant l'algorithme "255-state".
Algorithme "255-state" :
Soit P le nombre de CodeWords depuis le début des données,
R un nombre pseudo-aléatoire,
V la valeur du CodeWord en "base 256" et
CW le CodeWord requis.
La formule est :R = ( ( 149 * P ) MOD 255 ) + 1
CW = ( V + R ) MOD 256
Informations Gomaro s.a.