Etudions le mode d'encodage.
- Chacun des 43 caractères du mode simple se compose d'un motif fixe constitué de 5 barres noires et de 4 barres blanches (espace).
- Les barres peuvent être fines ou larges (Les larges font 2,2 à 3 fois la largeur des fines)
- Il y a toujours 3 barres larges parmi les 9 barres.
- Une barre blanche fine ajoutée à la fin permet l'espacement avec le caractère suivant.
- Un caractère spécial (Affecté au symbole *) sert de délimiteur de début et de fin.
- Une clé de contrôle peut être ajoutée; elle est calculée en totalisant les valeurs de chaque caractère tirées du tableau suivant, puis en prenant le reste de la division de cette somme par 43.
-
Dans le tableau suivant les barres noires étroites sont symbolisées par "1", les larges par "111", les barres blanches
étroites par "0" et les larges par "000".
Caractère
Valeur
Motif
0
0
101000111011101
1
1
111010001010111
2
2
101110001010111
3
3
111011100010101
4
4
101000111010111
5
5
111010001110101
6
6
101110001110101
7
7
101000101110111
8
8
111010001011101
9
9
101110001011101
A
10
111010100010111
B
11
101110100010111
C
12
111011101000101
D
13
101011100010111
E
14
111010111000101
Caractère
Valeur
Motif
F
15
101110111000101
G
16
101010001110111
H
17
111010100011101
I
18
101110100011101
J
19
101011100011101
K
20
111010101000111
L
21
101110101000111
M
22
111011101010001
N
23
101011101000111
O
24
111010111010001
P
25
101110111010001
Q
26
101010111000111
R
27
111010101110001
S
28
101110101110001
T
29
101011101110001
Caractère
Valeur
Motif
U
30
111000101010111
V
31
100011101010111
W
32
111000111010101
X
33
100010111010111
Y
34
111000101110101
Z
35
100011101110101
-
36
100010101110111
.
37
111000101011101
Espace
38
100011101011101
$
39
100010001000101
/
40
100010001010001
+
41
100010100010001
%
42
101000100010001
*
100010111011101
Exemple de clé de contrôle pour : ZB65732
35 + 11 + 6 +5 +7 +3 +2 = 69
69 / 43 = 1, reste 26 qui correspond à la lettre Q
Nouveau code avec la clé : ZB65732Q
Le mode étendu.
Les caratéres ne faisant pas partie du mode simple sont codés à l'aide de l'un des 4 préfixe
% $ / +
suivi d'un caractère de base selon la table suivante. Pour utiliser littéralement les caratéres qui servent de préfixe ou le symbole * il faudra utiliser
un codage sur 2 caractéres.
Caractère à produire
Séquence à utiliser
NUL
%U
SOH
$A
STX
$B
ETX
$C
EOT
$D
ENQ
$E
ACK
$F
BEL
$G
BS
$H
HT
$I
LF
$J
VT
$K
FF
$L
CR
$M
SO
$N
SI
$O
DLE
$P
DC1
$Q
DC2
$R
DC3
$S
DC4
$T
NAK
$U
SYN
$V
ETB
$W
CAN
$X
EM
$Y
SUB
$Z
ESC
%A
FS
%B
GS
%C
RS
%D
US
%E
SPACE
SPACE
!
/A
"
/B
#
/C
$
/D
%
/E
&
/F
'
/G
(
/H
)
/I
*
/J
Caractère à produire
Séquence à utiliser
+
/K
,
/L
-
-
.
.
/
/O
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
:
/Z
;
%F
<
%G
=
%H
>
%I
?
%J
@
%V
A
A
B
B
C
C
D
D
E
E
F
F
G
G
H
H
I
I
J
J
K
K
L
L
M
M
N
N
O
O
P
P
Q
Q
R
R
S
S
T
T
U
U
Caractère à produire
Séquence à utiliser
V
V
W
W
X
X
Y
Y
Z
Z
[
%K
\
%L
]
%M
^
%N
_
%O
`
%W
a
+a
b
+b
c
+c
d
+d
e
+e
f
+f
g
+g
h
+h
i
+i
j
+j
k
+k
l
+l
m
+m
n
+n
o
+o
p
+p
q
+q
r
+r
s
+s
t
+t
u
+u
v
+v
w
+w
x
+x
y
+y
z
+z
{
%P
|
%Q
}
%R
~
%S
DEL
%T
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 :
-
La méthode graphique où chaque barre est "dessinée" comme un rectangle plein. Cette méthode permet de calculer la largeur de chaque
barre au pixel près et de travailler sur des multiples de la largeur d'un pixel du périphérique utilisé. Cela donne une bonne précision surtout si
le périphérique a une faible densité comme c'est le cas des écrans et des imprimantes à jet d'encre. Cette méthode demandes des routines de programmations
spécifiques et ne permet pas de réaliser des codes barres avec un logiciel courant.
-
La police spécifique dans laquelle chaque caractère est remplacé par le code barre d'un caractère. Cette méthode permet d'utiliser n'importe
quel programme comme un traitement de texte ou un tableur (Par exemple LibreOffice, le clone gratuit de MSoffice !) Les mises à l'échelles en fonction du corps
(La taille quoi) choisi peuvent entrainer de petites distorsions du dessin des barres. Avec une imprimante moderne il n'y a aucun problème.
La plupart des polices pour codes barre 3 de 9 trouvées sur le net (Polices de démonstration incomplètes) sont payantes (Parfois très chères) et de qualité douteuse ;
la largeur des modules n'étant pas toujours constante dans la définition de la police. J'ai donc décidé de dessiner entièrement une police 3 de 9 et de la proposer en
téléchargement. Je l'ai testé sur une imprimante laser en corps 11, ce qui donne un très petit code barre d'environ 1,6 mm de largeur par caractère, résultat :
lecture à 100% ! Sur une bonne imprimante à jet d'encre il faut monter au corps 15 ce qui donne des caractères de 2,1 mm de large.
La police " code39.ttf "
Cette police contient les 43 caractères de base et le délimiteur sous le symbole * . Chaque caractère se termine par une barre blanche fine de séparation.
Copiez ce fichier dans le répertoire des polices, le plus souvent : \Windows\Fonts
Structure d'un code 3 de 9.
Un code barre 3 de 9 sera donc constitué de la manière suivante :
- Délimiteur de début symbolisé par le caractère *
- Autant de caractères que nécessaires, les caractères du mode étendu seront préfixés.
- Délimiteur de fin
Un petit programme pour tester le mode de base.
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 :

Ce programme de test ne gère ni le mode étendu ni la clé de contrôle.
La fonction Code39$ peut être réutilisée dans n'importe quel autre programme écrit en Visual Basic 6 ; elle peut également être recopiée telle quelle dans
une macro VBA rattachée à un document Office.
Public Function Code39$(chaine$)
'V 1.0.0
'Paramètres : une chaine
'Retour : * une chaine qui, affichée avec la police CODE39.TTF, donne le code barre
' * une chaine vide si paramètre fourni incorrect
Dim i%
Code39$ = ""
If Len(chaine$) > 0 Then
'Vérifier si caractères valides
For i% = 1 To Len(chaine$)
Select Case Asc(Mid$(chaine$, i%, 1))
Case 32, 36, 37, 43, 45 To 57, 65 To 90
Case Else
i% = 0
Exit For
End Select
Next
If i% > 0 Then
Code39$ = "*" & chaine$ & "*"
End If
End If
End Function
Fichier Excel de démonstration
Pichier pour Libre Office
Depuis la première parution de cette page, j'ai reçu de nombreuses versions dans différents langages, les voici :
Language
Auteur
Visual Foxpro
Emile MAITREJEAN
Delphi
Jean-Camille POPULUS
Delphi
Francisco FERNANDEZ