GS1 Sunrise 2027: Passaggio ai codici a barre 2D per il commercio globale

Categoria del blog: Barcode.NET

07.08.2025

GS1 Sunrise 2027 è un progetto globale per la transizione dai tradizionali codici a barre EAN/UPC monodimensionali (1D) a codici a barre bidimensionali (2D) per migliorare la trasparenza, la tracciabilità e la sicurezza dei prodotti. Entro la fine del 2027, si prevede che le aziende del commercio al dettaglio, della sanità e altre aziende in tutto il mondo saranno tenute a implementare nuovi standard di identificazione dei prodotti presso i loro punti vendita (POS) e servizi (POC). Già in fase di test in 48 paesi, che coprono l'88% del PIL globale, l'iniziativa Sunrise 2027 sta diventando la nuova norma per il commercio globale.

VintaSoft, in qualità di sviluppatore di uno strumento specializzato per il riconoscimento dei codici a barre - VintaSoft Barcode .NET SDK, considera questi cambiamenti un'opportunità strategica per modernizzare i processi aziendali dei clienti ed espandere le funzionalità dell'SDK nel nuovo contesto normativo.


Cos'è GS1 Sunrise 2027

Sunrise 2027 è un'iniziativa GS1 annunciata ufficialmente negli anni 2020, con l'obiettivo di garantire che entro il 2027 i sistemi di vendita al dettaglio e logistica di tutto il mondo siano in grado di scansionare e interpretare i codici a barre 2D insieme ai familiari codici a barre 1D. Tuttavia, l'obiettivo principale è sostituire i formati 1D con quelli 2D più versatili, in grado non solo di identificare un prodotto, ma anche di trasmettere dati aggiuntivi: data di scadenza, numero di lotto, paese di origine, certificati di qualità, ecc.


Perché l'intero settore sta cambiando

Il vecchio formato EAN/UPC si è rivelato limitato:

I codici a barre 2D come GS1 DataMatrix e GS1 Digital Link QR risolvono questi problemi consentendo:


Quali saranno le conseguenze per gli operatori del mercato?

La transizione ai codici a barre 2D avviata da GS1 interesserà quasi tutti gli attori della filiera, dai produttori agli sviluppatori di software. Questi cambiamenti non possono essere considerati un semplice aggiornamento tecnico: stiamo parlando della ristrutturazione di processi fondamentali nella logistica, nella vendita al dettaglio e nell'interazione con i consumatori.

Le aziende manifatturiere saranno tra le prime a risentire dell'impatto del nuovo standard. Dovranno adattare le linee di produzione e i processi di confezionamento per stampare i nuovi codici a barre. Mentre in precedenza era sufficiente applicare un codice a barre lineare con GTIN alla confezione, ora il formato 2D dovrà includere molte più informazioni: data di scadenza, numero di lotto, informazioni sulla composizione e talvolta persino un collegamento a un certificato digitale o a un sito web. Tutto ciò richiede l'aggiornamento sia delle apparecchiature che dell'infrastruttura IT che garantisce la generazione e la gestione dei nuovi codici a barre.

Per i rivenditori e gli operatori logistici, la sfida principale sarà la necessità di adattare i dispositivi di scansione per registratori di cassa e magazzini. Sebbene la maggior parte degli scanner moderni supporti già i codici a barre 2D, non tutti sono ottimizzati per gli standard GS1. Ciò significa che non solo le apparecchiature dovranno essere aggiornate, ma anche il software dovrà essere modificato per riconoscere ed elaborare correttamente i nuovi campi dati.

Anche gli sviluppatori di soluzioni software, inclusi quelli che creano sistemi di contabilità, ERP, applicazioni per registratori di cassa e soluzioni mobile, devono prepararsi al cambiamento nei formati dei codici a barre. È necessario non solo aggiungere il supporto per i nuovi sistemi di simboli, ma anche implementare la corretta interpretazione della struttura dei dati secondo gli standard GS1. Ciò include l'elaborazione degli identificatori di applicazione (AI), l'analisi dei campi nidificati e, nel caso dell'utilizzo del formato GS1 Digital Link, l'interazione con servizi web esterni. In questo caso, l'accuratezza del riconoscimento è particolarmente importante, poiché un errore nell'interpretazione dei dati può portare a guasti logistici, resi e persino conseguenze legali.


Cosa rende speciale un codice a barre 2D

I codici a barre 2D rappresentano la prossima evoluzione nei sistemi di identificazione automatica. Non solo sostituiscono i codici a barre lineari, ma aprono anche nuove opportunità per aziende, produzione e logistica grazie alla loro versatilità e ricchezza di informazioni.

A differenza dei codici a barre 1D (ad esempio EAN/UPC), che possono contenere solo un identificatore di prodotto di base (GTIN), i codici a barre 2D sono in grado di trasmettere un'ampia gamma di parametri richiesti per le moderne catene di fornitura e i servizi digitali.

I principali vantaggi dei codici a barre 2D includono:

La transizione a un nuovo sistema di codici a barre incoraggia le aziende non solo a conformarsi agli standard, ma anche a creare ecosistemi digitali che colleghino il packaging fisico alle esperienze online.


Fasi di implementazione di GS1 Sunrise 2027

Fase informativa e volontaria

Diffusione delle conoscenze, progetti pilota, adattamento dei sistemi interni, test della doppia etichettatura (1D + 2D). Le aziende hanno tempo per modernizzare e testare le tecnologie.


Implementazione obbligatoria per settore e regione

Transizione all'uso obbligatorio dei codici a barre 2D per determinate categorie di prodotti e territori. L'obiettivo principale è l'aggiornamento delle apparecchiature POS, la formazione del personale e la garanzia della compatibilità delle catene di fornitura.


Piena conformità e integrazione

Entro la fine del 2027, tutte le aziende coperte dallo standard dovranno passare completamente ai codici a barre 2D, fino a sostituire i classici EAN/UPC ove possibile. Aggiornamento costante degli standard e relativo supporto.


Sfide e soluzioni durante la transizione

La transizione dai tradizionali codici a barre lineari ai formati 2D non rappresenta solo un aggiornamento tecnologico, ma anche una sfida organizzativa. Le aziende si trovano ad affrontare una serie di sfide pratiche, tecniche e normative, soprattutto se la loro infrastruttura è ancora dominata da soluzioni legacy di scansione, stampa o elaborazione di codici a barre.

Le difficoltà più comuni includono:

Nonostante queste sfide,Una corretta pianificazione e la scelta degli strumenti giusti possono semplificare notevolmente la transizione.

Soluzioni chiave che si consiglia di applicare nella pratica:

La transizione ai codici a barre 2D è un progetto che richiede un approccio globale, ma con strumenti e partner moderni, diventa non solo fattibile, ma anche redditizio in termini di prospettive di sviluppo aziendale.


In che modo VintaSoft Barcode .NET SDK aiuta le aziende a conformarsi a GS1 Sunrise 2027

Il prodotto di VintaSoft - VintaSoft Barcode .NET SDK - risolve i problemi di riconoscimento rapido e accurato dei codici a barre sia monodimensionali che bidimensionali, inclusi i codici a barre DataMatrix e QR Code. Ciò consente alle aziende di:

La transizione a GS1 Sunrise 2027 promuove la digitalizzazione, la trasparenza e la sicurezza nella moderna supply chain. È importante prepararsi ai cambiamenti ora, modernizzare gli strumenti di marcatura e riconoscimento, investendo in soluzioni come VintaSoft Barcode .NET SDK per una lettura ed elaborazione efficienti dei nuovi codici a barre 2D.


Ecco un codice C# che mostra come generare un codice a barre GS1 Digital Link e riconoscere il codice a barre generato.
using System;
using System.Text;

using Vintasoft.Barcode;
using Vintasoft.Barcode.BarcodeInfo;
using Vintasoft.Barcode.SymbologySubsets;
using Vintasoft.Barcode.GS1;
using Vintasoft.Imaging;

/// <summary>
/// Test that shows how to encode the barcode data in GS1 Digital Link format,
/// create image with GS1 Digital Link barcode,
/// read GS1 Digital Link barcode from image and print data stored in GS1 format.
/// </summary>
class GS1DigitalLinkExample
{

    /// <summary>
    /// Runs the test (available barcode types QR, DataMatrix).
    /// </summary>
    public static void TestGS1DigitalLink(BarcodeType digitalLinkBarcodeType)
    {
        // GS1 Digital Link barcode
        GS1DigitalLinkBarcodeSymbologySubset barcodeSubset;
        if (digitalLinkBarcodeType == BarcodeType.QR)
            barcodeSubset = BarcodeSymbologySubsets.GS1DigitalLinkQR;
        else if (digitalLinkBarcodeType == BarcodeType.DataMatrix)
            barcodeSubset = BarcodeSymbologySubsets.GS1DigitalLinkDataMatrix;
        else
            throw new NotSupportedException();

        // form the GS1 Application identifiers
        //
        GS1ApplicationIdentifierValue[] aiValues = new GS1ApplicationIdentifierValue[4];
        GS1ApplicationIdentifier ai;
        // 01 - Global Trade Item Number
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("01");
        aiValues[0] = new GS1ApplicationIdentifierValue(ai, "0123456789123C");
        // 310 - Net weight, kilograms
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("310");
        aiValues[1] = new GS1ApplicationIdentifierValue(ai, "0012.55");
        // 30 - Count of Items
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("30");
        aiValues[2] = new GS1ApplicationIdentifierValue(ai, "10");
        // 90 - Company Internal Information
        ai = GS1ApplicationIdentifiers.FindApplicationIdentifier("90");
        aiValues[3] = new GS1ApplicationIdentifierValue(ai, "ABCabc12345");
        // create GS1 value item
        GS1DigitalLinkValueItem gs1DigitalLinkValue = new GS1DigitalLinkValueItem(new GS1DigitalLink("vintasoft.com", aiValues));

        // create the barcode writer
        using (BarcodeWriter writer = new BarcodeWriter())
        {
            // specify that writer must create output image as 24-bpp image
            writer.Settings.PixelFormat = BarcodeImagePixelFormat.Bgr24;

            // encode GS1 Digital Link barcode
            barcodeSubset.Encode(gs1DigitalLinkValue, writer.Settings);

            // create image with barcode
            using (VintasoftBitmap barcodeImage = writer.GetBarcodeAsVintasoftBitmap())
            {
                // delete aiValues array
                aiValues = null;

                // read barcode with GS1 value

                // create barcode reader
                using (BarcodeReader reader = new BarcodeReader())
                {
                    // specify that reader must search for GS1 Digital Link barcodes only

                    reader.Settings.ScanBarcodeTypes = BarcodeType.None;
                    reader.Settings.ScanBarcodeSubsets.Add(barcodeSubset);

                    // read barcode from image
                    IBarcodeInfo[] infos = reader.ReadBarcodes(barcodeImage);

                    // gets GS1 value from barcode value
                    gs1DigitalLinkValue = (GS1DigitalLinkValueItem)(infos[0].ValueItems[0]);

                    // print barcode type
                    Console.WriteLine("Barcode Type: {0}", infos[0].BarcodeType);
                    Console.WriteLine();

                    // print GS1 Digital Link URI value
                    Console.WriteLine("GS1 Digital Link URI:\n{0}", gs1DigitalLinkValue.DigitalLink.DigitalLinkUri);
                    Console.WriteLine();

                    // gets a GS1 Application identifiers from barcode value
                    aiValues = gs1DigitalLinkValue.ApplicationIdentifierValues;

                    StringBuilder printableValue = new StringBuilder();
                    // print Application identifiers values
                    for (int i = 0; i < aiValues.Length; i++)
                    {
                        GS1ApplicationIdentifierValue aiValue = aiValues[i];
                        ai = aiValue.ApplicationIdentifier;
                        Console.WriteLine(string.Format("[{0}] {1}", i + 1, aiValue));
                        Console.WriteLine(string.Format("Application identifier   : {0}", ai.ApplicationIdentifier));
                        Console.WriteLine(string.Format("Value                    : {0}", aiValue.Value));
                        Console.WriteLine(string.Format("Data title               : {0}", ai.DataTitle));
                        Console.WriteLine(string.Format("Data content             : {0}", ai.DataContent));
                        Console.WriteLine(string.Format("Format                   : {0}", ai.Format));
                        Console.WriteLine(string.Format("Is contains decimal point: {0}", ai.IsContainsDecimalPoint));
                        Console.WriteLine(string.Format("Is variable length       : {0}", ai.IsVariableLength));
                        Console.WriteLine();
                        printableValue.Append(aiValue.ToString());
                    }

                    // print GS1 printable value
                    Console.WriteLine("Printable GS1 value: " + printableValue.ToString());
                }
            }
        }
    }
}