Mot exact Résultats par page

Index des mots-clés

AGENDA PERSONNEL
ALBUM PHOTO (Script)
ANTI SPAM
APICULTURE
BOISSONS (Recettes)
BREDELE
C++
CADRE
CHARLOTTE AUX FRUITS
CODAGE ADRESSES MAIL
CODE 2 DE 5 ENTRELACE
CODE 3 DE 9
CODE 128
CODE PDF417
CODES BARRE
CODE POSTAL
CODES VIDEOTEXT
CONFITURES
CONGOLAIS
CONSERVES (Recettes)
CORNICHONS AU VINAIGRE
COUARAIL
CUISINE (Bases)
CYBERMUT
DADANT
DATAMATRIX
DDE
DESSERTS (Recettes)
DOUBLE NAT
DYNDNSUPDATE
EAN 13
EAN 128
ELECTRONIQUE
ENTREES (Recettes)
ENVOI DE SMS
ESPACE MEMBRE
EURO
EXEMPLES VB6
FAVORIS
FONCTIONS
FONCTIONS EN C++
GUACAMOLE
IMPRIMANTES RESEAUX
INSTANCE UNIQUE
KIT VB4
LANGSTROTH
LEGUMES (Recettes)
MADELEINES
MAISONS
MAQUEREAUX AU VIN BLANC
MAQUEREAUX (Rillettes)
NMEA
NOUGATINE
PAIN
PDF417
PHP
PIC
PLANS DE MAISON
PATISSERIE (Bases)
PLANTEUR
PLATS COMPLETS (Recettes)
POISSONS (Recettes)
PROCEDURES
PROGRAMMATION
RECETTES DE CUISINE
RESSOURCES RESEAUX
R.I.B.
ROUTINES
RUCHE
SALADES (Recettes)
SAUMON EN CROUTE
SCRIPTS
SITES
SLICE
SMS
SOUPE DE COURGE
TABLE PERIODIQUE
TATIN (Tarte)
USB
VIANDES (Recettes)
VIDEOTEXT
VISUAL BASIC
VOIRNOT
WNTIPCFG

Mot exact Résultats par page
I
N
D
E
X

Le code 128

Attention
nouvelle version
en 2008


English version

Ce code complexe permet le codage des 128 caractères ASCII. Le résultat est très dense, notamment pour le codage des valeurs numériques. Il est utilisé entre autre sur certaine feuille de sécurité sociale et sur certaines étiquettes de transport pour inscrire le numéro SSCC. (Identifiant du colis)

Etudions le mode d'encodage.

Valeur Table A Table B Table C Code ASCII Caractère Motif ValeurTable A Table B Table C Code ASCII Caractère Motif
0 Espace Espace 00 0032 ou 0212 Espace ou Ô 11011001100 54V V 54 0086 V 11101011000
1 ! ! 01 0033 ! 11001101100 55W W 55 0087 W 11101000110
2 " " 02 0034 " 11001100110 56X X 56 0088 X 11100010110
3 # # 03 0035 # 10010011000 57Y Y 57 0089 Y 11101101000
4 $ $ 04 0036 $ 10010001100 58Z Z 58 0090 Z 11101100010
5 % % 05 0037 % 10001001100 59[ [ 59 0091 [ 11100011010
6 & & 06 0038 & 10011001000 60\ \ 60 0092 \ 11101111010
7 ' ' 07 0039 ' 10011000100 61] ] 61 0093 ] 11001000010
8 ( ( 08 0040 ( 10001100100 62^ ^ 62 0094 ^ 11110001010
9 ) ) 09 0041 ) 11001001000 63_ _ 63 0095 _ 10100110000
10 * * 10 0042 * 11001000100 64nul ` 64 0096 ` 10100001100
11 + + 11 0043 + 11000100100 65soh a 65 0097 a 10010110000
12 , , 12 0044 , 10110011100 66stx b 66 0098 b 10010000110
13 - - 13 0045 - 10011011100 67etx c 67 0099 c 10000101100
14 . . 14 0046 . 10011001110 68eot d 68 0100 d 10000100110
15 / / 15 0047 / 10111001100 69eno e 69 0101 e 10110010000
16 0 0 16 0048 0 10011101100 70ack f 70 0102 f 10110000100
17 1 1 17 0049 1 10011100110 71bel g 71 0103 g 10011010000
18 2 2 18 0050 2 11001110010 72bs h 72 0104 h 10011000010
19 3 3 19 0051 3 11001011100 73ht i 73 0105 i 10000110100
20 4 4 20 0052 4 11001001110 74lf j 74 0106 j 10000110010
21 5 5 21 0053 5 11011100100 75vt k 75 0107 k 11000010010
22 6 6 22 0054 6 11001110100 76ff l 76 0108 l 11001010000
23 7 7 23 0055 7 11101101110 77cr m 77 0109 m 11110111010
24 8 8 24 0056 8 11101001100 78s0 n 78 0110 n 11000010100
25 9 9 25 0057 9 11100101100 79s1 o 79 0111 o 10001111010
26 : : 26 0058 : 11100100110 80dle p 80 0112 p 10100111100
27 ; ; 27 0059 ; 11101100100 81dc1 q 81 0113 q 10010111100
28 < < 28 0060 < 11100110100 82dc2 r 82 0114 r 10010011110
29 = = 29 0061 = 11100110010 83dc3 s 83 0115 s 10111100100
30 > > 30 0062 > 11011011000 84dc4 t 84 0116 t 10011110100
31 ? ? 31 0063 ? 11011000110 85nak u 85 0117 u 10011110010
32 @ @ 32 0064 @ 11000110110 86syn v 86 0118 v 11110100100
33 A A 33 0065 A 10100011000 87etb w 87 0119 w 11110010100
34 B B 34 0066 B 10001011000 88can x 88 0120 x 11110010010
35 C C 35 0067 C 10001000110 89em y 89 0121 y 11011011110
36 D D 36 0068 D 10110001000 90sub z 90 0122 z 11011110110
37 E E 37 0069 E 10001101000 91esc { 91 0123 { 11110110110
38 F F 38 0070 F 10001100010 92fs | 92 0124 | 10101111000
39 G G 39 0071 G 11010001000 93gs } 93 0125 } 10100011110
40 H H 40 0072 H 11000101000 94rs ~ 94 0126 ~ 10001011110
41 I I 41 0073 I 11000100010 95us del 95 0200 È 10111101000
42 J J 42 0074 J 10110111000 96Fnc 3 Fnc 3 96 0201 É 10111100010
43 K K 43 0075 K 10110001110 97Fnc 2 Fnc2 97 0202 Ê 11110101000
44 L L 44 0076 L 10001101110 98Shift Shift 98 0203 Ë 11110100010
45 M M 45 0077 M 10111011000 99Code C Code C 99 0204 Ì 10111011110
46 N N 46 0078 N 10111000110 100Code B Fnc 4 Code B 0205 Í 10111101110
47 O O 47 0079 O 10001110110 101Fnc 4 Code A Code A 0206 Î 11101011110
48 P P 48 0080 P 11101110110 102Fnc 1 Fnc 1 Fnc 1 0207 Ï 11110101110
49 Q Q 49 0081 Q 11010001110 103Start A Start A Start A 0208 Ð 11010000100
50 R R 50 0082 R 11000101110 104Start B Start B Start B 0209 Ñ 11010010000
51 S S 51 0083 S 11011101000 105Start C Start C Start C 0210 Ò 11010011100
52 T T 52 0084 T 11011100010 106Stop Stop Stop 0211 Ó 1100011101011
53 U U 53 0085 U 11011101110

Exemple de clé de contrôle en utilisant la table B pour : ZB65
104 + (1 x 58) + (2 x 34) + (3 x 22) + (4 x 21) = 380
380 / 103 = 3, reste 71 qui est la valeur de la clé.

Version 2.00 de la police : Le code des caractères 95 et suivant a été modifié par rapport à la version 1.00. La fonction d'encodage (voir plus bas) a été modifiée en conséquence.

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 128 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 128 et de la proposer en téléchargement. Je l'ai testé sur une imprimante laser en corps 17, ce qui donne un petit code barre d'environ 1,7 mm de largeur par caractère, résultat : lecture à 100% ! Sur une bonne imprimante à jet d'encre on peut descendre (Hé oui !) au corps 15 ce qui donne des caractères de 1,5mm de large.

La police " code128.ttf "


Cette police contient les 107 motifs du code. Les codes de START et de STOP intégrent les marges.

Copiez ce fichier
dans le répertoire des
polices, le plus souvent :
C:\WINDOWS\FONTS

Structure d'un code 128


Un code barre 128 sera donc constitué de la manière suivante :

Un petit programme pour tester tout ça


Notez l'optimisation de "3754" en "EV" de la table C

Voici un petit programme écrit
en Visual Basic 6 ; le fichier
d'installation copiera le
programme, les dépendances Visual
Basic ainsi que les
fichiers sources et la police.

Fichier d'auto-installation :

Fichier ZIP sans installation :

Ce programme de test ne gère pas les codes de contrôle ASCII, il utilise les tables B & C avec optimisation de la longueur du code obtenu.


La fonction Code128$ 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 Excel ou Word. (Voir la note concernant la version)
Public Function Code128$(chaine$)
  'V 2.0.0
  'Paramètres : une chaine
  'Parameters : a string
  'Retour : * une chaine qui, affichée avec la police CODE128.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 CODE128.TTF font
  '         * an empty string if the supplied parameter is no good
  Dim i%, checksum&, mini%, dummy%, tableB As Boolean
  Code128$ = ""
  If Len(chaine$) > 0 Then
  'Vérifier si caractères valides
  'Check for valid characters
    For i% = 1 To Len(chaine$)
      Select Case Asc(Mid$(chaine$, i%, 1))
      Case 32 To 126, 203
      Case Else
        i% = 0
        Exit For
      End Select
    Next
    'Calculer la chaine de code en optimisant l'usage des tables B et C
    'Calculation of the code string with optimized use of tables B and C
    Code128$ = ""
    tableB = True
    If i% > 0 Then
      i% = 1 'i% devient l'index sur la chaine / i% become the string index
      Do While i% <= Len(chaine$)
        If tableB Then
          'Voir si intéressant de passer en table C / See if interesting to switch to table C
          'Oui pour 4 chiffres au début ou à la fin, sinon pour 6 chiffres / yes for 4 digits at start or end, else if 6 digits
          mini% = IIf(i% = 1 Or i% + 3 = Len(chaine$), 4, 6)
          GoSub testnum
          If mini% < 0 Then 'Choix table C / Choice of table C
            If i% = 1 Then 'Débuter sur table C / Starting with table C
              Code128$ = Chr$(210)
            Else 'Commuter sur table C / Switch to table C
              Code128$ = Code128$ & Chr$(204)
            End If
            tableB = False
          Else
            If i% = 1 Then Code128$ = Chr$(209) 'Débuter sur table B / Starting with table B
          End If
        End If
        If Not tableB Then
          'On est sur la table C, essayer de traiter 2 chiffres / We are on table C, try to process 2 digits
          mini% = 2
          GoSub testnum
          If mini% < 0 Then 'OK pour 2 chiffres, les traiter / OK for 2 digits, process it
            dummy% = Val(Mid$(chaine$, i%, 2))
            dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 105)
            Code128$ = Code128$ & Chr$(dummy%)
            i% = i% + 2
          Else 'On n'a pas 2 chiffres, repasser en table B / We haven't 2 digits, switch to table B
            Code128$ = Code128$ & Chr$(205)
            tableB = True
          End If
        End If
        If tableB Then
          'Traiter 1 caractère en table B / Process 1 digit with table B
          Code128$ = Code128$ & Mid$(chaine$, i%, 1)
          i% = i% + 1
        End If
      Loop
      'Calcul de la clé de contrôle / Calculation of the checksum
      For i% = 1 To Len(Code128$)
        dummy% = Asc(Mid$(Code128$, i%, 1))
        dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 105)
        If i% = 1 Then checksum& = dummy%
        checksum& = (checksum& + (i% - 1) * dummy%) Mod 103
      Next
      'Calcul du code ASCII de la clé / Calculation of the checksum ASCII code
      checksum& = IIf(checksum& < 95, checksum& + 32, checksum& + 105)
      'Ajout de la clé et du STOP / Add the checksum and the STOP
      Code128$ = Code128$ & Chr$(checksum&) & Chr$(211)
    End If
  End If
  Exit Function
testnum:
  'si les mini% caractères à partir de i% sont numériques, alors mini%=0
  'if the mini% characters from i% are numeric, then mini%=0
  mini% = mini% - 1
  If i% + mini% <= Len(chaine$) Then
    Do While mini% >= 0
      If Asc(Mid$(chaine$, i% + mini%, 1)) < 48 Or Asc(Mid$(chaine$, i% + mini%, 1)) > 57 Then Exit Do
      mini% = mini% - 1
    Loop
  End If
Return
End Function 

Pour tester cette fonction avec Excel, voici un fichier de démonstration : et avec Open Office :

Depuis la première parution de cette page, j'ai reçu de nombreuses versions dans différents langages, les voici :

Language

Auteur

 

WinDev 5.5

Laurent PERICAUD

L4G Progress

André SEJOURNET

Visual Foxpro

Emile MAITREJEAN

Delphi

Jean-Camille POPULUS
Francisco FERNANDEZ 


PL/SQL pour Oracle
PLpgSQL

Nicolas FANCHAMPS


Crystal Report

Sébastien REZÉ

Python

Michel CLAVEAU

Java

Virginie LHUILLIER
Jean-Luc BLOECHLE 


ASP

 G!L

PHP

Franck Odouard &
Pierre Guizard

C #

Joffrey VERDIER

 

Les codes EAN.UCC 128

Ce sont des codes 128 dont le contenu est normalisé et correspond à une utilisation dans le domaine de la logistique. Un code EAN128 commence par le caractère Fnc1 suivi d'un ou plusieurs champs de données. Chaque champ commence par un AI (Identificateur d'application) qui indique ce que contient le champ (Numéro de colis ou date de péremption par exemples) suivi par les données elles-même. Ces données sont de longueur fixe ou variable, numériques ou alphanumériques, avec ou sans somme de controle et tout ceci en fonction de chaque AI. Si un champ est à longueur variable,que la longueur maximale n'est pas utilisé et qu'il n'est pas le dernier champ, alors on le fait suivre par un caractère Fnc1. Certains AI nécessite que les données soient suivies par une somme de controle; celle-ci est calculée de la manière suivante :

    Les chiffres sont numérotés de droite à gauche, puis on calcule 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

J'ai réalisé un petit programme permettant de créer facilement des codes EAN128 et prenant en compte ces caractéristiques.

Fichier d'auto-installation :

Fichier ZIP sans installation :


Vous aimez cette page ?

Elle vous est utile ?

Cliquez ici !