In modern logistics, retail, medicine and manufacturing, GS1 standards, including Application Identifiers (AI), have become a universal tool for structuring data in barcodes. To work effectively with such codes, it is critical not only to read a string of characters, but also to correctly parse the content - to select each application identifier and the data associated with it. The VintaSoft Barcode .NET SDK software product provides a powerful tool for analyzing and structuring information in accordance with GS1 standard.
What are GS1 application identifiers and why analyze them
GS1 Application Identifiers are short numeric prefixes (usually 2-4 digits) placed in the barcode before the actual data. Each prefix uniquely identifies the type of information, such as a Global Trade Item Number (GTIN), production date, expiration date, weight, serial number, etc. Correct interpretation of these identifiers allows for the automatic extraction of structured, unambiguous information from the barcode for accounting, tracking, and automation of enterprise processes.
What barcode formats do GS1 identifiers support
GS1 standards with application identifiers are used in many barcode symbol systems:
- GS1-128 — used in logistics and warehouses for marking packages, pallets, and shipping labels;
- GS1 Data Matrix — most in demand in pharmaceuticals and medicine for identifying drugs, components, and medical devices;
- GS1 QR Code — a universal format suitable for quickly transmitting extended information or online verification;
- GS1 DataBar — often found in retail and on fresh food packaging to record weight, expiration date, and price.
These are the formats most often used by large enterprises around the world to ensure end-to-end traceability and automation.
How GS1 identifiers analysis works with VintaSoft Barcode .NET SDK
The VintaSoft Barcode .NET SDK software package allows not only to quickly read any type of barcodes, but also to automatically parse data lines in accordance with the GS1 standard.
Main stages of analysis:
- Barcode recognition and format definition. The SDK automatically determines whether the scanned barcode belongs to one of the GS1 standards and supports working with application identifiers.
- Search for identifiers and data markup. After successful decoding, the scanner uses the internal parsing rules of GS1 standards and sequentially breaks the scanned line into separate sections: it selects each application identifier and associates it with the corresponding content (number, date, string).
- Formation of a structured result. As a result of the analysis, the SDK returns not a single line, but an expanded structured object, where each identifier corresponds to its value and description. This approach gives applications or business systems flexible and unambiguous access to data without manual parsing.
- Flexible processing of different combinations of identifiers. Supports working with complex barcodes containing sets of different AI: for example, simultaneous extraction of GTIN, expiration date, weight, serial number and other information.
Application and benefits for business
Analysis of GS1 application identifiers with VintaSoft Barcode .NET SDK opens up new automation and control opportunities for companies. The solution is easily integrated into the business process chain, facilitates the accounting of goods movement and ensures a high level of data reliability.
Among the practical advantages:
- Automation of accounting and control of receipt, shipment and inventory of goods;
- Increased transparency of supply chains and compliance with labeling requirements;
- Reduction of errors due to accurate extraction of information from barcodes;
- Quick integration with corporate IT systems;
- Ability to work with various code formats and applications.
Using such a tool helps businesses not only reduce costs, but also improve the quality of services, speed up the processing of goods, and make processes more transparent and modern.
Conclusion
Analysis and parsing of GS1 application identifiers is an integral part of modern automation and accounting processes in retail, logistics, and healthcare.
VintaSoft Barcode .NET SDK provides a universal, flexible, and high-performance solution for scanning and analyzing complex barcodes that comply with GS1 global standards. With support for a wide range of formats, automatic parsing of structured data and easy integration into existing systems, VintaSoft solutions help companies increase process transparency and reduce operational costs.
For more information on the capabilities of VintaSoft Barcode .NET SDK and integration examples, please visit
VintaSoft official website or contact the company's support service.
Here is a C# code that demonstrates how to generate a Code128 barcode image with GS1 information (GS1-128) and recognize a GS1-128 barcode in the generated image:
using System;
using System.Text;
using Vintasoft.Barcode;
using Vintasoft.Barcode.BarcodeInfo;
using Vintasoft.Barcode.GS1;
using Vintasoft.Barcode.SymbologySubsets;
using Vintasoft.Imaging;
/// <summary>
/// Test that shows how to encode the barcode data in GS1 format using the GS1Codec class,
/// create image with GS1-128 barcode,
/// read GS1-128 barcode from image and
/// parse data stored in GS1 format.
/// </summary>
class GS1CodecExample
{
/// <summary>
/// Runs the test.
/// </summary>
public static void TestGS1Codec()
{
bool valueVisible = true;
// 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");
// get GS1 printable value
StringBuilder printableValue = new StringBuilder();
foreach (GS1ApplicationIdentifierValue value in aiValues)
printableValue.Append(value);
// 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;
// specify that writer must generate Code128 barcode
writer.Settings.Barcode = BarcodeType.Code128;
// encode GS1 value in GS1-128 symbology
writer.Settings.Value = GS1Codec.GS1_128.Encode(aiValues, writer.Settings);
// set printable value
if (valueVisible)
{
writer.Settings.ValueVisible = true;
writer.Settings.PrintableValue = printableValue.ToString();
}
else
{
writer.Settings.ValueVisible = false;
}
// create image with barcode
using (VintasoftBitmap barcodeImage = writer.GetBarcodeAsVintasoftBitmap())
{
// delete aiValues array
aiValues = null;
// create barcode reader
using (BarcodeReader reader = new BarcodeReader())
{
// specify that reader must search for GS1-128 barcodes only
reader.Settings.ScanBarcodeTypes = BarcodeType.None;
reader.Settings.ScanBarcodeSubsets.Add(BarcodeSymbologySubsets.GS1_128);
// read barcode from image
IBarcodeInfo[] infos = reader.ReadBarcodes(barcodeImage);
// gets a GS1 Application identifiers from barcode value
aiValues = ((GS1BarcodeInfo)infos[0]).ApplicationIdentifierValues;
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());
}
}
}
}
}