Le code barre type UPC-A utilisé aux états unis. Il ne comporte que 11 chiffres
plus la clé. C'est en réalité un code EAN13 dont le premier chiffre serait zéro et dont la présentation
serait légérement différente. Le code UPC-A est un sous-ensemble du code EAN13.
Exemple :
Ces deux codes barre sont identiques, on a rajouté un zéro devant le code
UPC-A pour obtenir le code EAN13 mais le motif des barres est strictement identique.
Depuis début 2005 tous les magasins des Etats-Unis doivent accepter le code
EAN13, il n'y a donc plus de raison de produire des codes UPC-A.
Signification des chiffres.
- 2 chiffres pour le code pays ou code système
- 5 chiffres pour l'identificateur de société
- 5 chiffres pour l'identificateur d'article
- 1 chiffre pour la somme de contrôle
Cette règle subit de nombreuses entorses pour améliorer l'usage des chiffres disponibles.
Voici la liste des codes pays ou système.
00 à 13 UCC (Etats-Unis et Canada)
20 à 29 Codification interne en magasin
30 à 37 GENCOD-EAN France
380 BCCI (Bulgarie)
383 SANA (Slovénie)
385 CRO-EAN(Croatie)
387 EAN-BIH (Bosnie-Herzégovine)
400 à 440 CCG (Allemagne)
45 + 49 Distribution Code Center DCC (Japon)
460 à 469 UNISCAN - EAN Russie (Fédération de Russie)
471 CAN (Taiwan)
474 EAN Estonie
475 EAN Lettonie
476 EAN Azerbaïdjan
477 EAN Lituanie
478 EAN Ouzbékistan
479 EAN Sri Lanka
480 PANC (Philippines)
481 EAN Biélorussie
482 EAN Ukraine
484 EAN Moldavie
485 EAN Arménie
486 EAN Georgie
487 EAN Kazakhstan
489 HKANA (Hong Kong)
50 E Centre UK
520 HELLCAN-EAN HELLAS (Grèce)
528 EAN Liban
529 EAN Chypre
531 EAN-MAC (FYR Macédonie)
535 EAN Malte
539 EAN Irlande
54 ICODIF/EAN Belgique. Luxembourg
560 CODIPOR (Portugal)
569 EAN Islande
57 EAN Danemark
590 EAN Pologne
594 EAN Roumanie
599 H.A.P.M.H. (Hongrie)
600 - 601 EAN Afrique du Sud
609 EAN Ile Maurice
611 EAN Maroc
613 EAN Algérie
619 Tunicode (Tunisie)
621 EAN Syrie
622 EAN Egypte
625 EAN Jordanie
626 EAN Iran
628 EAN Arabie Saoudite
64 EAN Finlande
690 - 693 Article Numbering Centre of China - ANCC (Chine)
70 EAN Norge (Norvège)
729 Israeli Bar Code Association EAN Israël
l73 EAN Suède
740 EAN Guatemala
741 EAN El Salvador
742 ICCC (Honduras)
743 EAN Nicaragua
744 EAN Costa Rica Panama
746 746 EAN République Dominicaine
750 AMECE (Mexique)
759 EAN Venezuela
76 EAN (Schweiz, Suisse, Svizzera)
770 IAC (Colombie)
773 EAN Uruguay
775 APC - EAN Peru (Pérou)
777 EAN Bolivie
779 CODIGO - EAN Argentine
780 EAN Chili
784 EAN Paraguay
786 ECOP (Equateur)
789 EAN Brésil
80 à 83 INDICOD (Italie)
84 AECOC (Espagne)
850 Camera de Comercio de la Republica de Cuba (Cuba)
858 EAN Slovaquie
859 EAN République Tchèque
860 EAN YU (Yougoslavie)
867 EAN DPR Korea (Corée du Nord)
869 Union of Chambers of Commerce of Turkey (Turquie)
)87 EAN Nederland (Hollande)
880 EAN Korea (Corée du Sud)
885 EAN Thaïlande
888 SANC (Singapour)
890 EAN Inde
893 EAN Vietnam
99 EAN Indonésie
90 - 91 EAN Autriche
93 EAN Australie
94 EAN Nouvelle Zélande
955 Malaysian Article Numbering Council (MANC) - Malaisie
977 Publications sérielles (ISSN)
978 - 979 Livres (ISBN)
980 Reçus de remboursement
981 - 982 Coupons (monnaie courante)
99 Coupons
Voyons maintenant le calcul de la somme de contrôle.
Les chiffres sont numérotés de droite à gauche
Soit x, la somme des chiffres pairs et y la somme des chiffres impairs
Calculons z = x + 3*y
Soit m le nombre divisible par 10 immédiatement supérieur à z
La somme de contrôle est : m - z
Exemple : 978020113447
x = 4 + 3 + 1 + 2 + 8 + 9 = 27
y = 7 + 4 + 1 + 0 + 0 + 7 = 19
z = 3 * 19 + 27 = 84
m = 90
Somme de contrôle = 90 - 84 = 6
EAN13 ---> 9 780201 134476
Puis étudions le système d'encodage.
- Le premier chiffre n'est pas codé mais il détermine les tables à utiliser pour le codage des 6 chiffres suivants.
- La largeur d'une barre fine (0,33 mm en standard) est appelée le module.
- Il existe des barres de 1, 2, 3 ou 4modules; de même pour les espaces.
- Chaque chiffre est codé sur 7 modules comprenant chacun 2 barres et deux espaces.
Symbolisons le module de barre par «1» et le module d'espace par «0»
- La marque de début de même que la marque de fin est : «101»
- La marque de séparation placée au milieu après le 7ème chiffre est : «01010»
- La longueur totale est toujours de 12 * 7 + 2 * 3 + 5 = 95 modules ; il y a toujours 30 barres au total.
- Les barres des séparateurs sont plus longues de 5 modules que les autres barres.
- Il faut des marges blanches de 11 modules à gauche et de 7 modules à droite au moins.
Les chiffres sont convertis selon l'une des 3 tables ci dessous; les codes des tables A et B commencent par un espace alors que ceux de la table C commencent par une barre.
Chiffre
Table A
Table B
Table C
0
0001101
0100111
1110010
1
0011001
0110011
1100110
2
0010011
0011011
1101100
3
0111101
0100001
1000010
4
0100011
0011101
1011100
5
0110001
0111001
1001110
6
0101111
0000101
1010000
7
0111011
0010001
1000100
8
0110111
0001001
1001000
9
0001011
0010111
1110100
Le premier chiffre n'est pas codé, chacun des 6 chiffres suivants est converti soit par la table A soit par la table B, et cela en fonction du premier chiffre.
Les 6 derniers chiffres sont convertis par la table C.
Une nouvelle table indique l'utilisation des tables A ou B pour les chiffres N°2 à N°7 en fonction du chiffre N°1
Chiffre N°1
N°2
N°3
N°4
N°5
N°6
N°7
0
A
A
A
A
A
A
1
A
A
B
A
B
B
2
A
A
B
B
A
B
3
A
A
B
B
B
A
4
A
B
A
A
B
B
5
A
B
B
A
A
B
6
A
B
B
B
A
A
7
A
B
A
B
A
B
8
A
B
A
B
B
A
9
A
B
B
A
B
A
Certains code EAN13 sont suivi d'un «supplément» de 2 ou 5 chiffres, notamment sur les livres et magazines.
Ce supplément est codé à l'aide des tables A & B. Le choix, pour chaque chiffre du supplément, de la table A ou B dépend d'une somme de contrôle qu'il faut calculer.
Supplément à 2 chiffres.
Calcul de la somme de contrôle :
Soit
x, la valeur du supplément
Soit
m le nombre divisible par 4 immédiatement inférieur à
x
La somme de contrôle est :
x - m
Exemple :
x = 35 --> m = 32
Somme contrôle = 35 - 32 = 3
Somme de contrôle
Chiffre 1
Chiffre 2
0
A
A
1
A
B
2
B
A
3
B
B
Supplément à 5 chiffres.
Calcul de la somme de contrôle :
Soit
x, la somme des chiffres pairs et
y la somme des chiffres impairs
Calculons
z = 9 * x + 3 * y
Soit
m le nombre divisible par 10 immédiatement inférieur à
z
La somme de contrôle est :
z - m
Exemple :
Supplément = 12345
x = 2 + 4 = 6 et y = 1 + 3 + 5 = 9 donc z = 9 * 6 + 3 * 9 = 81
Somme de contrôle = 81 - 80 = 1
Somme de contrôle
Chiffre N°1
N°2
N°3
N°4
N°5
0
B
B
A
A
A
1
B
A
B
A
A
2
B
A
A
B
A
3
B
A
A
A
B
4
A
B
B
A
A
5
A
A
B
B
A
6
A
A
A
B
B
7
A
B
A
B
A
8
A
B
A
A
B
9
A
A
B
A
B
De plus un supplément débute par un délimiteur spécial de 4 modules dont la formule est : 1011 et chaque caractère, sauf le dernier, est suivi d'un séparateur de formule 01.
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 EAN 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 EAN13 et de la proposer en
téléchargement. Je l'ai testé sur une imprimante laser en corps 14, ce qui donne un très petit code barre d'environ 13 mm de largeur, résultat :
lecture à 100% ! Sur une bonne imprimante à jet d'encre, ce même corps de 14 fonctionne parfaitement.
La police " EAN13.ttf "
Cette police contient 5 jeux des 10 chiffres pour les trois tables A, B et C étudiées plus haut ainsi que 2 jeux pour l'inscription du premier chiffre (Table D & E)
- Table A : Jeu de code A incluant le code barre et le chiffre en dessous.
- Table B : Jeu de code B incluant le code barre et le chiffre en dessous.
- Table C : Jeu de code C incluant le code barre et le chiffre en dessous.
- Table D : Jeu de chiffre et délimiteur de début
- Table E : Jeu de chiffre de début sans délimiteur (Nécessaire pour les logiciels de chez SAGE)
Le tableau suivant indique la correspondance entre le code barre dessiné et la lettre tapée (Code ASCII entre parenthèse)
Chiffre
Table A
Table B
Table C
Table D
Table E
0
A (65)
K (75)
a (97)
0 (48)
k (107)
1
B (66)
L (76)
b (98)
1 (49)
l (108)
2
C (67)
M (77)
c (99)
2 (50)
m (109)
3
D (68)
N (78)
d (100)
3 (51)
n (110)
4
E (69)
O (79)
e (101)
4 (52)
o (111)
5
F (70)
P (80)
f (102)
5 (53)
p (112)
6
G (71)
Q (81)
g (103)
6 (54)
q (113)
7
H (72)
R (82)
h (104)
7 (55)
r (114)
8
I (73)
S (83)
i (105)
8 (56)
s (115)
9
J (74)
T (84)
j (106)
9 (57)
t (116)
Codes supplémentaires
: (58)
Délimiteur de début (Pour logiciel SAGE)
* (42)
Délimiteur central
+ (43)
Délimiteur de fin
[ (91)
Délimiteur début de supplément
\ (92)
Séparateur de caratère dans le supplément
Copiez ce fichier dans le répertoire des polices, le plus souvent : \Windows\Fonts
Le délimiteur de début seul (Code 58) et la table E ont étés ajoutés
pour les utilisateurs des logiciels
SAGE qui devront alors configurer dans leur
logiciel le tableau de codage de la police EAN13 comme suit :
Position
1
2
3
4
5
6
7
8
9
Valeur
[
:
A
K
*
a
+
k
]
Structure d'un code EAN13
Un code barre EAN13 sera donc constitué de la manière suivante :
- Chiffre N°1 de la table D (Incluant la marge gauche et le délimiteur de début)
- 6 chiffres des tables A ou B en fonction du premier chiffre
- Délimiteur central
- 6 chiffres de la table C
- Délimiteur de fin (Incluant la marge de droite)
Un petit programme pour tester tout ça
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 EAN13$ 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 ean13$(chaine$)
'Cette fonction est régie par la Licence Générale Publique Amoindrie GNU (GNU LGPL)
'This function is governed by the GNU Lesser General Public License (GNU LGPL)
'V 1.1.1
'Paramètres : une chaine de 12 chiffres
'Parameters : a 12 digits length string
'Retour : * une chaine qui, affichée avec la police EAN13.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 EAN13.TTF font
' * an empty string if the supplied parameter is no good
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
ean13$ = ""
'Vérifier qu'il y a 12 caractères
'Check for 12 characters
If Len(chaine$) = 12 Then
'Et que ce sont bien des chiffres
'And they are really digits
For i% = 1 To 12
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
i% = 0
Exit For
End If
Next
If i% = 13 Then
'Calcul de la clé de contrôle
'Calculation of the checksum
For i% = 12 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 11 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
'Le premier chiffre est pris tel quel, le deuxième vient de la table A
'The first digit is taken just as it is, the second one come from table A
CodeBarre$ = Left$(chaine$, 1) & Chr$(65 + Val(Mid$(chaine$, 2, 1)))
first% = Val(Left$(chaine$, 1))
For i% = 3 To 7
tableA = False
Select Case i%
Case 3
Select Case first%
Case 0 To 3
tableA = True
End Select
Case 4
Select Case first%
Case 0, 4, 7, 8
tableA = True
End Select
Case 5
Select Case first%
Case 0, 1, 4, 5, 9
tableA = True
End Select
Case 6
Select Case first%
Case 0, 2, 5, 6, 7
tableA = True
End Select
Case 7
Select Case first%
Case 0, 3, 6, 8, 9
tableA = True
End Select
End Select
If tableA Then
CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
Else
CodeBarre$ = CodeBarre$ & Chr$(75 + Val(Mid$(chaine$, i%, 1)))
End If
Next
CodeBarre$ = CodeBarre$ & "*" 'Ajout séparateur central / Add middle separator
For i% = 8 To 13
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+" 'Ajout de la marque de fin / Add end mark
ean13$ = CodeBarre$
End If
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
Neobook 4
Jean-Louis HUVE
Visual Foxpro
Emile MAITREJEAN
Delphi
John SWIJSEN
Delphi
YARDIMLI EKIM
Delphi
Francisco FERNANDEZ
C#
Russell SAYERS
Perl
Simone FIORAVANTI
Axapta
Søe JESPER
Le code EAN 8
Il ressemble beaucoup au code EAN 13. Il comporte 7 chiffres et une somme de contrôle calculée exactement de la même manière que pour le code EAN13. Les délimiteurs gauche (On utilisera l'ASCII
58), central et droit sont les mêmes. Les 4 premiers chiffres sont construits avec la table A et les 4 derniers avec la table C.
Nous utiliserons donc aussi la police EAN13 avec cette fonction :
Public Function EAN8$(chaine$)
'V 1.0.0
'Paramètres : une chaine de 7 chiffres
'Parameters : a 7 digits length string
'Retour : * une chaine qui, affichée avec la police EAN13.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 EAN13.TTF font
' * an empty string if the supplied parameter is no good
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
EAN8$ = ""
'Vérifier qu'il y a 7 caractères
'Check for 7 characters
If Len(chaine$) = 7 Then
'Et que ce sont bien des chiffres
'And they are really digits
For i% = 1 To 7
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
i% = 0
Exit For
End If
Next
If i% = 8 Then
'Calcul de la clé de contrôle
'Calculation of the checksum
For i% = 7 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 6 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
'Les 4 premier chiffre viennent de la table A
'The first 4 digits come from table A
CodeBarre$ = "" 'Ajout marque de début / Add start mark
For i% = 1 To 4
CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "*" 'Ajout séparateur central / Add middle separator
For i% = 5 To 8
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+" 'Ajout de la marque de fin / Add end mark
EAN8$ = CodeBarre$
End If
End If
End Function