Etudions le mode d'encodage.
- Le premier chiffre d'une paire est codé avec 5 barres noires et le second chiffre avec 5 barres blanches.
- Les barres peuvent être fines ou épaisses. (Les épaisses sont 2,2 à 3 fois plus large que les fines)
- Il y a toujours 2 barres épaisses parmi 5 barres.
- 2 caractères speciaux sont utilisés comme délimiteur de début et de fin.
-
Une somme de contrôle peut être ajoutée, voici la méthode de calcul :
Les chiffres sont numérotés de droite à gauche, calculons X la somme des chiffres pairs et Y la somme des chiffres impairs.
Calculons alors Z = X + 3 * Y
Soit M le nombre divisible par 10 immédiatement supérieur à Z
La somme de contrôle est : M - Z
- Dans la table suivante les barres fines sont symbolisées par "N" et les épaisses par "W"
Valeur
Codage
0
NNWWN
1
WNNNW
2
NWNNW
3
WWNNN
4
NNWNW
5
WNWNN
6
NWWNN
7
NNNWW
8
WNNWN
9
NWNWN
Exemple de somme de contrôle pour : 65732
(2 + 7 + 6) x 3 + 3 + 5 = 53 ---> M = 60
60 - 53 = 7
Le nouveau code avec la somme de contrôle est : 657327 (Noter que le nombre de chiffre incluant la somme de contrôle est pair.)
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 laser il n'y a aucun problème.
La plupart des polices pour codes barre 2 de 5 entrelacé 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 2 de 5 entrelacé et de la proposer en
téléchargement. Je l'ai testé sur une imprimante laser en corps 15, ce qui donne un très petit code barre d'environ 1,2mm de largeur par chiffre, résultat :
lecture à 100% ! Sur une bonne imprimante à jet d'encre ce même corps 15 donne le même résultat.
La police " code25I.ttf "
Du fait que le code 2 de 5 entrelacé encode des paires de chiffres ma police contient les 100 paires de 00 à 99. 2 caractères additionnels sont réservés aux symboles de début et de fin.
Paire de chiffres
Code ASCII
Caractère
Motif
00
0033
!
NNNNWWWWNN
01
0034
"
NWNNWNWNNW
.../...
93
0126
~
NWWWNNWNNN
94
0195
Ã
NNWNNWWNNW
.../...
99
0200
È
NNWNNNWWNW
Début
0201
É
NNNN
Fin
0202
Ê
WNN
Copiez ce fichier dans le répertoire des polices, le plus souvent : \Windows\Fonts
Structure d'un code 2 de 5 entrelacé.
Un code 2 de 5 entrelacé sera donc constitué de la manière suivante :
- Un délimiteur de début symbolisé par le caractère É
- Autant de caractères que nécessaire, chaque caractère représente 2 chiffres.
- Un délimiteur de fin symbolisé par le caractère Ê
Un petit programme de test.
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 code25I$ 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 Code25I$(chaine$, Optional key As Boolean)
'V 2.0.0
'Paramètres : * une chaine
' * un drapeau vrai si une clé doit être ajoutée
'Parameters : * a string
' * a flag true if a key must be added
'Retour : * une chaine qui, affichée avec la police CODE25I.TTF, donne le code barre
' * une chaine vide si paramètre fourni incorrect
'Return : * a string which give the bar code when it is dispayed with CODE25I.TTF font
' * an empty string if the supplied parameter is no good
Dim i%, checksum&, dummy%
Code25I$ = ""
If Len(chaine$) > 0 Then
'Vérifier si caractères valides
'Check for valid characters
For i% = 1 To Len(chaine$)
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then Exit Function
Next
'Ajouter si nécessaire la clé
'Add if necessary the checksum
If key Then
For i% = Len(chaine$) To 1 Step -2
checksum& = checksum& + Val(Mid$(chaine$, i%, 1))
Next
checksum& = checksum& * 3
For i% = Len(chaine$) - 1 To 1 Step -2
checksum& = checksum& + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum& Mod 10) Mod 10
End If
'Vérifier si la longueur est paire
'Check if the length is odd
If Len(chaine$) \ 2 <> Len(chaine$) / 2 Then Exit Function
'Calculer la chaine de code
'Calculation of the code string
For i% = 1 To Len(chaine$) Step 2
dummy% = Val(Mid$(chaine$, i%, 2))
dummy% = IIf(dummy% < 94, dummy% + 33, dummy% + 101)
Code25I$ = Code25I$ & Chr$(dummy%)
Next
'Ajoute START et STOP / Add START and STOP
Code25I$ = Chr$(201) & Code25I$ & Chr$(202)
End If
End Function
Fichier Excel de démonstration
Fichier 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
Delphi
Francisco FERNANDEZ
Visual Foxpro
Cédric THIVIND
C#
Pauline