GOMARO s.a. - CH 1123 Aclens - Switzerland Annexe : codes à barres

Composition du
      code DataMatrix :

Table des matières :
  1. Structure
  2. Codage bas niveau
  3. Codage haut niveau
    1. Mode Ascii
    2. Mode C40 et TEXT
    3. Mode Edifact
    4. Mode Base 256
Un symbole DataMatrix peut comprendre jusqu'à 2'335 caractères alphanumériques ou 3'116 caractères numériques. 

La composition du DataMatrix se fait en deux étapes : 

  1. les données sont converties en "CodeWord" (codage de haut niveau)
  2. ceux-ci sont convertis en carrés noirs et blancs (codage de bas niveau)

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. 

Structure :

Codage de bas niveau :

Taille du symbole
Lignes x Colonnes
Nombre de
zones de données
(H x V)
Nombre de
CodeWords
de Reed Solomon
Nombre
de
blocs
Symboles carrés
10x10 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 rectangulaires
8x18 1 7 1
8x32 2 11 1
12x26 1 14 1
12x36 1x2 18 1
16x36 1x2 24 1
16x48 1x2 28 1

 

Codage de haut niveau :

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
*Bytes/CW:Bytes/CodeWord
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 254

Le 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" + 130

Modes 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 + 1 
    avec 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 C40
Jeu de base
pour TEXT
Jeu
Shift 1
Jeu
Shift 2
Jeu
Shift 3
pour C40
Jeu
Shift 3
pour TEXT
Jeu
pour X12
00 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'094
CodeWord1= 32' 094  \  256 = 125
CodeWord2= 32' 094 MOD 256 = 94
La séquence est donc: 125, 94

Les 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
EDIFACT
Valeur
ASCII
du caractère
Commentaire
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: 49

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

Valid HTML 4.01!