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