English version

Le code EAN13.



Ce code utilisé sur tous les articles de consommation courante permet le codage de 12 chiffres, le treizième chiffre étant une clé de contrôle qu'il faudra générer. Avant d'entrer dans la technique, deux petites digressions.

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.

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.
Symbolisons le module de barre par «1» et le module d'espace par «0» 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 en fonction du chiffre N°1

Selon chiffre 1 Chiffe 2 Chiffre 3 Chiffre 4 Chiffre 5 Chiffre 6 Chiffre 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
Chiffe 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
Chiffe 1 Chiffre 2 Chiffre 3 Chiffre 4 Chiffre 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 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)

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 :
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 E YARDIMLI 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
			


Vous aimez cette page ?

Elle vous est utile ?
Cliquez ici !