DecodeEAN128

Décodage d'un code GS1

Syntaxe

function DecodeEAN128(EAN128: String; func1: String; separator: String; fields: TStrings): Boolean
EAN128: code à décoder
func1: chaîne de caractères de début de code, telle que réglée sur le lecteur code-barres
separator:chaîne de caractères de séparation, telle que réglée sur le lecteur code-barres
fields: TStrings où seront stockées les valeurs des champs décodés, associées à l'identifiant GS1 correspondant

Remarques

Cette fonction permet de décoder les AI ("Application Identifiers") contenus dans un code GS1 (cf. https://en.wikipedia.org/wiki/GS1-128).

Si elle rencontre des problèmes lors du décodage, la fonction renvoie False et fields contient une entrée EAN128ERROR qui indique les problèmes rencontrés.

La donnée "brute" de chaque AI décodé est accessible dans la TStrings de sortie, associée au code de l'identifiant GS1 (ex : fields.Values['00'] pour le SSCC).
Sauf pour les AI suivants (310 à 316, 320 à 337, 340 à 357, 360 à 369, 395), qui représentent des nombres décimaux, pour lesquels la TStrings de sortie contient directement la valeur décimale (cf. exemple ci-dessous).
NB: dans le cas d'un AI dont la valeur a déclenché une erreur, par exemple car elle ne respecte pas les contraintes GS1, sa valeur brute se trouve avec un suffixe "_Raw" (ex : fields.Values['00_Raw']).

En plus, pour certains AI, la TStrings de sortie contient des informations supplémentaires :

  • AI '00' : le SSCC est aussi découpé en 4 éléments (extension, prefixe, CNUF, ID), accessibles respectivement par les codes '00a', '00b', '00c' et '00d' (Attention : les 3 derniers éléments sont désormais obsolètes et ne doivent plus être utilisés tels quels)
  • AI '8001' : le code de rouleau est découpé en 5 éléments (largeur en millimètres, longueur en mètres, diamètre interne en millimètres, direction d''enroulement, nombre de raccords), accessibles respectivement par les codes '8001a', '8001b', '8001c', '8001d' et '8001e'

Il y a eu plusieurs changements dans Qubes 9.0 :

  • la fonction vérifie la plupart des contraintes définies dans le standard "GS1 General Specifications, Release 22.0, ratified Jan 22"
  • si on laisse func1 vide, la fonction supporte à la fois les codes qui ne commencent pas par une chaîne spécifique (comme dans les versions précédentes), mais aussi ceux qui commencent par un code AIM standard de la forme ]cm (où c est le caractère de symbologie défini par AIM et m est le caractère de variante pour cette symbologie). NB : bien que pour GS1, les codes symbologies actuellement définis soient ]C1, ]d2, ]Q3 et ]J1, si on a laissé func1 vide, la fonction ne les vérifie pas explicitement, afin de pouvoir supporter les futurs codes de symbologie, à condition qu'ils aient le même format.
  • si on laisse separator vide, la fonction utilisera le caractère standard <GS> (caractère ASCII 29).
  • la valeur numérique des AI qui contiennent un nombre décimal se trouve dans la TStrings de sortie, avec le code de l'AI suivi d'un 'a'
  • la valeur numérique de la date/heure des AI qui contiennent une date (11 à 13, 15 à 17, 4326, 7006) ou une date/heure (4324 à 4326, 7003, 7006, 8008) se trouve dans la TStrings de sortie, avec le code de l'AI suivi d'un 'a' (cf. exemple ci-dessous)
  • pour l'AI 7007, les valeurs numériques de la date de début de récolte et de la date de fin de récolte se trouvent dans la TStrings de sortie, avec les codes '7007a' et '7007b'
  • pour les AI suivants (253, 255, 8003), la TStrings de sortie contient aussi l'identifiant GS1 et la chaîne de caractères complémentaire, avec le code de l'AI suivi respectivement d'un 'a' et d'un 'b'
  • pour les AI suivants (8006, 8026), la TStrings contient aussi le GTIN, le numéro de pièce et le nombre total, avec le code de l'AI suivi respectivement d'un 'a', d'un 'b' et d'un 'c'
  • pour les AI 423 et 425, les codes pays individuels sont accessibles dans la TStrings de sortie avec le code de l'AI, suivi d'une lettre de 'a' à 'e' en fonction du nombre de pays contenus dans l'AI
  • pour les AI 391 et 393, la valeur numérique du montant et l'unité sont accessibles dans la TStrings de sortie avec le code de l'AI, suivi respectivement de 'a' et 'b'
  • pour les AI 7030 à 7039 et 421, le code pays et la donnée associée sont accessibles dans la TStrings de sortie avec le code de l'AI, suivi respectivement de 'a' et 'b'
  • pour les AI pas encore définis, afin d'être robuste à une évolution du standard GS1, la TStrings contient la valeur brute pour chaque AI possible (entre 1 et 3) compte-tenu des AI existants (cf. exemple ci-dessous)

Exemples

var AIs := new TStrings;
if DecodeEAN128(']C1' + '00' + '123456789012345675'
                      + '01' + '12345678901231'
                      + '310' + '3012345'
                      + '15' + '251200'
                      + '14' + '12abcd' // AI pas encore défini, mais le nombre de caractères l'est
                      + '10' + 'Batch1234' + #29
                      + '240' + 'PID790-123/A',
                      '', '', AIs) then begin
   PrintLn('SSCC = ' + AIs.Values['00']);                            // SSCC = 123456789012345675
   PrintLn('GTIN = ' + AIs.Values['01']);                            // GTIN = 12345678901231
   PrintLn('NET WEIGHT (kg) = ' + AIs.Values['310']);                // NET WEIGHT (kg) = 012.345
   PrintLn('BEST BEFORE = ' + DateToStr(AIs.Values['15a'].ToFloat)); // BEST BEFORE = 31/12/2025
   PrintLn('BATCH = ' + AIs.Values['10']);                           // BATCH = Batch1234
   PrintLn('ADDITIONAL ID = ' + AIs.Values['240']);                  // ADDITIONAL ID = PID790-123/A
   PrintLn('?? = ' + AIs.Values['14']);                              // ?? = 12abcd
   PrintLn('??? = ' + AIs.Values['141']);                            // ??? = 2abcd
   PrintLn('???? = ' + AIs.Values['1412']);                          // ???? = abcd
end else begin
   PrintLn(AIs.Values['EAN128ERROR']);
   PrintLn('Raw SSCC = ' + AIs.Values['00'] ?? AIs.Values['00_Raw']);
end;

Classification

QuBES