GS1 Sunrise 2027: グローバルコマース向け 2D バーコードへの移行

ブログ カテゴリ: バーコード.NET

2025/08/07

GS1 Sunrise 2027 は、従来の 1 次元 (1D) EAN/UPC バーコードから 2 次元 (2D) バーコードに移行し、製品の透明性、追跡可能性、セキュリティを向上させるグローバル プロジェクトです。2027 年末までに、世界中の小売、ヘルスケア、その他のビジネスで、販売時点 (POS) とサービス時点 (POC) で新しい製品識別規格を実装することが求められると予想されています。 Sunrise 2027 イニシアチブは、すでに 48 か国でテストされており、世界の GDP の 88% をカバーしており、世界貿易の新たな標準になりつつあります。

VintaSoft は、バーコード認識用の専用ツールである VintaSoft Barcode .NET SDK の開発者として、これらの変更を顧客のビジネス プロセスを近代化し、新しい規制環境で SDK の機能を拡張するための戦略的機会と見ています。



GS1 Sunrise 2027 とは

Sunrise 2027 は、2027 年までに世界中の小売および物流システムで、一般的な 1D バーコードに加えて 2D バーコードをスキャンして解釈できるようにすることを目標とした、2020 年代に正式に発表された GS1 イニシアチブです。しかし、主な目標は、1D 形式をより汎用性の高い 2D 形式に置き換えることです。2D 形式は、製品を識別できるだけでなく、有効期限、バッチ番号、原産国、品質証明書などの追加データを送信することもできます。


業界全体が切り替えている理由

古い EAN/UPC 形式には制限があることが判明しました。

GS1 DataMatrix や GS1 Digital Link QR などの 2D バーコードは、次の機能によりこれらの問題を解決します。


これは市場参加者にどのような影響を与えますか?

GS1 が開始した 2D バーコードへの移行は、製造業者からソフトウェア開発者まで、商品チェーンのほぼすべての参加者に影響を与えます。これらの変更は単なる技術的なアップグレードと考えることはできません。物流、小売、消費者とのやり取りにおける基本的なプロセスの再構築について話しているのです。

製造会社は、新しい規格の影響を最初に受ける企業の 1 つです。新しいバーコードを印刷するために、生産ラインと梱包プロセスを適応させる必要があります。以前は GTIN 付きの 1 次元バーコードを梱包に貼り付けるだけで十分でしたが、これからは 2D 形式で、有効期限、バッチ番号、構成情報、場合によってはデジタル証明書や Web サイトへのリンクなど、さらに多くの情報を含める必要があります。これらすべてには、新しいバーコードの生成と管理を保証する機器と IT インフラストラクチャの両方のアップグレードが必要です。

小売業者や物流事業者にとって、主な課題はレジや倉庫のスキャン機器の適応です。最新のスキャナーのほとんどは既に2Dバーコードをサポートしていますが、すべてがGS1規格に最適化されているわけではありません。つまり、機器の更新だけでなく、新しいデータフィールドを正しく認識・処理するためにソフトウェアの修正も必要になります。

会計システム、ERP、レジアプリケーション、モバイルソリューションなどのソフトウェアソリューション開発者も、バーコード形式の変更に備える必要があります。新しいシンボルシステムのサポートを追加するだけでなく、GS1規格に従ったデータ構造の正しい解釈を実装する必要があります。これには、アプリケーション識別子(AI)の処理、ネストされたフィールドの解析、そしてGS1デジタルリンク形式を使用する場合は外部Webサービスとの連携が含まれます。ここでは、認識精度が特に重要です。データ解釈の誤りは、物流の失敗、返品、さらには法的措置につながる可能性があるからです。


2Dバーコードの特徴

2Dバーコードは、自動識別システムの次世代です。線形バーコードに取って代わるだけでなく、その汎用性と情報量の豊富さにより、ビジネス、生産、物流に新たな機会をもたらします。

基本的な製品識別子(GTIN)のみを含めることができる1Dバーコード(EAN / UPCなど)とは異なり、2Dバーコードは、現代のサプライチェーンとデジタルサービスに必要なさまざまなパラメーターを伝達できます。

2Dバーコードの主な利点は次のとおりです。

新しいバーコード システムへの移行により、企業は標準に準拠するだけでなく、物理的なパッケージとオンライン エクスペリエンスを結び付けるデジタル エコシステムを構築することが促進されます。


GS1 Sunrise 2027 の実装段階

情報および自主的な段階

知識の普及、パイロット プロジェクト、社内システムの適応、デュアル ラベリング (1D + 2D) のテスト。企業は技術の近代化とテストを行う時間があります。


業界および地域による強制実装

特定の製品カテゴリと地域で 2D バーコードの強制使用への移行。主な焦点は、POS 機器の更新、担当者のトレーニング、サプライ チェーンの互換性の確保です。


完全な準拠と統合

2027 年末までに、標準の対象となるすべての企業は、可能な場合は従来の EAN/UPC を置き換えるまで、2D バーコードに完全に切り替える必要があります。標準とそのサポートは継続的に更新されます。


移行時の課題と解決策

従来の 1 次元バーコードから 2D 形式への移行は、技術的なアップグレードであるだけでなく、組織的な課題でもあります。企業は、特にインフラストラクチャが従来のスキャン、印刷、またはバーコード処理ソリューションで占められている場合、多くの実用的、技術的、および規制上の課題に直面します。

最も一般的な問題は次のとおりです。

これらの課題にもかかわらず、適切な計画と適切なツールの選択により、移行がはるかに容易になります。

実際に適用することが推奨される主要なソリューション:

2Dバーコードへの移行は包括的なアプローチを必要とするプロジェクトですが、最新のツールとパートナーを活用すれば、実現可能であるだけでなく、事業開発の見通しにおいても収益性の高いものになります。


VintaSoft Barcode .NET SDK が企業の GS1 Sunrise 2027 準拠にどのように役立つか

VintaSoft の製品である VintaSoft Barcode .NET SDK は、DataMatrix や QR コードなどの 1 次元バーコードと 2 次元バーコードの高速で正確な認識の問題を解決します。これにより、企業は次のことが可能になります。

GS1 Sunrise 2027 への移行により、現代のサプライ チェーンのデジタル化、透明性、セキュリティが促進されます。今すぐ変更に備えて、新しい 2D バーコードを効率的に読み取り、処理するための VintaSoft Barcode .NET SDK などのソリューションに投資し、マーキングおよび認識ツールを最新化することが重要です。


GS1 デジタル リンク バーコードを生成し、生成されたバーコードを認識する方法を示す C# コードを以下に示します。
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());
                }
            }
        }
    }
}