Tạo mã vạch GS1QR rất đơn giản cho đến khi tải trọng chứa ký tự Phân tách Nhóm. Ký tự không hiển thị duy nhất này, ASCII 29, là thứ cho máy quét biết nơi trường Định danh Ứng dụng có độ dài biến đổi kết thúc. Các nhà phát triển đã khắc phục bằng cách lắp ráp byte thủ công, bộ mã hoá tùy chỉnh, hoặc tách tải trọng, và mỗi cách khắc phục đều mang rủi ro tạo ra các ký hiệu có thể quét được nhưng không phân tích được.

Aspose.BarCode for Python via .NET 26.6 loại bỏ vấn đề đó bằng một cờ duy nhất. Thuộc tính encode_gs1_separator_in_byte_mode buộc bộ mã QR ghi các dấu phân tách nhóm GS1 và ký tự % dưới dạng byte thô, giữ nguyên cấu trúc GS1 chính xác. Hướng dẫn này bao gồm quy trình tạo và nhận dạng mã vạch đầy đủ trong python‑net: cài đặt SDK, tạo ký hiệu GS1QR tuân thủ, và xác minh ở mức độ điểm mã rằng dấu phân tách đã tồn tại qua quá trình vòng quay.

Tại sao các dấu phân tách GS1 ở chế độ byte lại quan trọng đối với mã vạch GS1QR

GS1QR là phương tiện hai chiều được lựa chọn trong chuỗi cung ứng, chăm sóc sức khỏe và bán lẻ, nơi một ký hiệu duy nhất phải chứa định danh sản phẩm, số lô, ngày hết hạn và số sê-ri trong một tải trọng có cấu trúc. Cú pháp GS1 Application Identifier cho phép điều này, nhưng nó phụ thuộc vào Group Separator để phân tách các trường có độ dài không cố định.

Hãy xem xét một payload kết hợp AI (10) cho số lô và AI (21) cho số sê-ri. Cả hai đều có độ dài biến đổi, vì vậy máy quét cần một ranh giới rõ ràng giữa chúng. Nếu không có một dấu phân tách được mã hoá đúng, hệ thống hạ nguồn sẽ đọc một chuỗi nối liền thay vì hai trường riêng biệt. Mã vạch được quét thành công nhưng vẫn cung cấp dữ liệu sai, loại lỗi tệ nhất, vì không có gì trong sự kiện quét báo hiệu vấn đề.

Byte-mode encoding giải quyết vấn đề này ngay từ nguồn. Bộ mã hoá ngừng việc diễn giải dấu phân cách như một dấu hiệu cấu trúc và ghi nó nguyên văn vào đoạn dữ liệu. Lợi ích thực tiễn cho các nhà phát triển Python là trực tiếp:

  • Tuân thủ. Ký hiệu được phát ra phù hợp với các Quy chuẩn Chung của GS1 thay vì chỉ xấp xỉ chúng.
  • Mã đơn giản hơn. Không cần lắp ráp byte thủ công, không có lớp con bộ mã hoá tùy chỉnh, không có bước xử lý hậu kỳ.
  • Khả năng kiểm thử. Vòng quay có thể được xác minh trong một bài kiểm thử đơn vị bằng cách khẳng định các điểm mã đã giải mã.

Tạo mã vạch GS1QR bằng Aspose.BarCode for Python

Aspose.BarCode for Python via .NET cung cấp một API cấp cao cho cả việc tạo mã vạch và nhận dạng. Cài đặt nó từ PyPI:

pip install aspose-barcode-for-python-via-net

Hai lớp thực hiện hầu hết công việc. BarcodeGenerator, từ aspose.barcode.generation, tạo và hiển thị các ký hiệu. BarCodeReader, từ aspose.barcode.barcoderecognition, giải mã chúng. Các cài đặt tạo được truy cập thông qua cây tham số trên thể hiện của trình tạo, nơi các tùy chọn đặc thù cho mỗi loại mã, chẳng hạn như cài đặt QR, nằm dưới parameters.barcode.qr.

Tài liệu tham khảo có sẵn trên trang sản phẩm, trang tài liệu, và tham chiếu API.

Nếu bạn có tệp giấy phép, hãy áp dụng nó một lần khi khởi động ứng dụng, trước bất kỳ lời gọi tạo hoặc nhận dạng nào:

from aspose.barcode import License

license = License()
license.set_license("Aspose.BarCode.Python.NET.lic")

Tạo mã vạch GS1QR với bộ tách chế độ Byte

  1. Nhập các kiểu cần thiết - BarcodeGeneratorEncodeTypes để tạo, BarCodeReaderDecodeType để xác minh.
  2. Khởi tạo BarcodeGenerator với EncodeTypes.GS1QR và một chuỗi tải trọng GS1. Dấu ngoặc đơn biểu thị các phần AI, như trong (10)ASPOSE2001(21)ASPOSE2026.
  3. Bật mã hoá dấu phân cách ở chế độ byte bằng cách đặt gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True.
  4. Đặt độ phân giải đầu ra để ký hiệu được tạo ra có thể sử dụng được trong việc in cũng như trên màn hình.
  5. Lưu hình ảnh ở định dạng không mất dữ liệu, sau đó đọc lại để xác nhận việc mã hoá.

Ví dụ sau đây minh họa quy trình làm việc hoàn chỉnh:

from aspose.barcode.barcoderecognition import BarCodeReader, DecodeType
from aspose.barcode.generation import BarcodeGenerator, EncodeTypes

# 1. Create a GS1QR Barcode with Sample AI Data
# (10) = Batch or Lot Number, (21) = Serial Number
gen = BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")

# 2. Turn on Byte-Mode Encoding for GS1 Group Separators
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True

# 3. Set a Print-Ready Resolution
gen.parameters.resolution = 300

# 4. Save the Barcode to a PNG File
gen.save("gs1qr_test.png")

# 5. Verify by Reading the Barcode Back
reader = BarCodeReader("gs1qr_test.png", DecodeType.GS1QR)
for result in reader.read_bar_codes():
    print("BarCode CodeText: " + result.code_text)

Cách hoạt động

  • BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026") tạo một trình tạo được cấu hình cho ký hiệu GS1QR. Dữ liệu tải sử dụng cú pháp GS1, trong đó (10) là AI Số Lô hoặc Lô hàng và (21) là AI Số Seri. Thư viện phân tích dạng có dấu ngoặc và chèn các dấu phân tách mà đặc tả yêu cầu.
  • gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True kích hoạt tùy chọn được giới thiệu trong phiên bản 26.6. Khi bật, bộ mã hóa ghi dấu phân tách nhóm và % dưới dạng byte thô trong đoạn dữ liệu thay vì diễn giải chúng.
  • gen.parameters.resolution = 300 tạo ra hình ảnh ở độ phân giải 300 DPI. Các ký hiệu chỉ dùng cho màn hình vẫn ổn ở giá trị mặc định, nhưng bất kỳ ký hiệu nào dự định in lên máy in nhãn hoặc artwork bao bì nên được tạo ở độ phân giải in thay vì phóng to sau này.
  • gen.save("gs1qr_test.png") ghi ra file PNG không mất dữ liệu, giữ nguyên mẫu mô-đun chính xác. Điều này quan trọng hơn đối với ký hiệu 2D so với 1D, vì bộ giải mã QR lấy mẫu một lưới và không chịu được các ranh giới mô-đun mờ.
  • read_bar_codes() trả về một iterable các đối tượng BarCodeResult, và result.code_text chứa dữ liệu tải đã giải mã bao gồm mọi ký tự điều khiển. Trong console, dấu phân tách không hiển thị gì cả, vì vậy phần tiếp theo kiểm tra các điểm mã thay vì tin vào đầu ra được in.

Đọc và Xác minh Mã vạch Được tạo

In ra chuỗi đã giải mã chứng minh ký hiệu có thể đọc được, không phải rằng nó đúng. Vì dấu phân tách nhóm là không hiển thị, một tải trọng thiếu dấu phân tách và một tải trọng có dấu phân tách đúng trông giống nhau trong terminal. Việc xác minh phải diễn ra ở mức độ điểm mã, điều này cũng giúp dễ dàng khẳng định trong bộ kiểm thử.

Steps

  1. Tải PNG đã lưu bằng BarCodeReaderDecodeType.GS1QR.
  2. Duyệt qua các kết quả đã giải mã.
  3. Kiểm tra điểm mã Unicode của mỗi ký tự, tìm U+001D.
  4. Tách payload dựa trên ký tự phân tách và so sánh các trường với đầu vào gốc.
from aspose.barcode.barcoderecognition import BarCodeReader, DecodeType

GROUP_SEPARATOR = "\x1d"

# Load the Barcode Image Generated Earlier
reader = BarCodeReader("gs1qr_test.png", DecodeType.GS1QR)
results = list(reader.read_bar_codes())

if not results:
    raise ValueError("No GS1QR barcode was detected in the image.")

for result in results:
    decoded = result.code_text
    print("Decoded GS1QR payload:", decoded)

# Inspect the Code Point of Every Character
    for index, char in enumerate(decoded):
        label = repr(char) if char.isprintable() else "<non-printable>"
        print(f"Char {index}: {label} (U+{ord(char):04X})")

# Confirm the Separator Survived the Round Trip
    if GROUP_SEPARATOR in decoded:
        fields = decoded.split(GROUP_SEPARATOR)
        print(f"Separator found. Payload splits into {len(fields)} field(s):")
        for field in fields:
            print("  -", field)
    else:
        print("Warning: no group separator present in the decoded payload.")

Cách hoạt động

  • Cấu hình trình đọc với DecodeType.GS1QR giới hạn việc nhận dạng chỉ ở ký hiệu đó, điều này nhanh hơn và an toàn hơn so với việc quét tất cả các loại, vì nó ngăn chặn một ký hiệu bị lỗi được giải mã thành QR thông thường và lặng lẽ vượt qua.
  • Việc hiện thực hóa kết quả bằng list(...) trước khi kiểm tra làm cho trường hợp rỗng trở nên rõ ràng. Một lỗi nhận dạng sẽ trả về một iterable rỗng thay vì ném lỗi, vì vậy một vòng lặp for không được bảo vệ trên một lần đọc thất bại sẽ hoàn thành một cách im lặng và báo cáo thành công.
  • Vòng lặp mã điểm là khẳng định thực tế. Việc thấy U+001D trong đầu ra xác nhận chế độ byte đã hoạt động; nếu không có nó có nghĩa là dấu phân tách đã bị loại bỏ hoặc biến đổi, bất kể payload được in ra có sạch sẽ đến đâu.
  • Việc tách bằng \x1d tái tạo các trường AI riêng lẻ, cung cấp cho bạn các giá trị có thể so sánh với dữ liệu nguồn trong một pipeline CI.

Nhận giấy phép miễn phí

Aspose cung cấp giấy phép tạm thời miễn phí giúp loại bỏ dấu watermarks đánh giá và mở khóa đầy đủ chức năng để thử nghiệm. Yêu cầu một giấy phép từ trang giấy phép tạm thời của Aspose.

Tài nguyên bổ sung miễn phí

Kết luận

Tùy chọn encode_gs1_separator_in_byte_mode thay thế một nhóm xử lý byte thủ công bằng một giá trị boolean duy nhất. Khi bật tùy chọn này trong các tham số QR, các dấu phân cách nhóm GS1, cùng với ký tự %, sẽ được ghi vào biểu tượng chính xác theo yêu cầu của tiêu chuẩn.

Trong hướng dẫn này, chúng tôi đã đề cập đến việc cài đặt, tạo ký hiệu GS1QR với các dấu phân tách ở chế độ byte, và xác minh kết quả ở mức độ mã ký tự thay vì chỉ tin tưởng vào đầu ra của console. Bước xác minh đó là phần quan trọng nhất cần giữ lại. Trong quy trình làm việc GS1, mã vạch được quét không đồng nghĩa với việc mã vạch là đúng, và một khẳng định mã ký tự trong bộ kiểm thử của bạn là điều giúp phân biệt hai điều này trước khi nhãn được đưa vào sản xuất.

FAQs

  1. Tùy chọn encode_gs1_separator_in_byte_mode làm gì?
    Nó chỉ thị cho bộ mã hoá QR phát ra ký tự phân tách nhóm GS1 (ASCII 29) và ký tự % dưới dạng dữ liệu byte thô thay vì xem chúng là các dấu hiệu cấu trúc, do đó chúng được giữ nguyên trong phần tải của mã vạch.

  2. Tôi có cần giấy phép đặc biệt để sử dụng các tính năng GS1QR không? GS1QR là một phần của thư viện chuẩn Aspose.BarCode. Bạn có thể đánh giá nó mà không cần giấy phép, và yêu cầu một giấy phép tạm thời miễn phí từ trang web Aspose để loại bỏ các dấu nước đánh giá.

  3. Tôi có thể sử dụng tính năng này với các loại mã QR khác không? Không. Cờ này áp dụng cho loại mã hoá GS1QR. Các bộ mã hoá QR tiêu chuẩn và Micro QR bỏ qua nó, vì việc phân tích GS1 Application Identifier không áp dụng cho chúng.

  4. Hình ảnh mã vạch được tạo có phải là không mất dữ liệu? Lưu dưới dạng PNG, mặc định, tạo ra một hình ảnh không mất dữ liệu, bảo toàn mẫu mô-đun chính xác. Tránh sử dụng JPEG cho mã vạch, vì các artefact nén của nó làm mờ các cạnh mô-đun và giảm tỷ lệ đọc.

  5. Làm thế nào để tôi xác minh rằng dấu phân tách đã được mã hoá đúng? Đọc lại hình ảnh bằng BarCodeReader sử dụng DecodeType.GS1QR và kiểm tra các điểm mã của chuỗi đã giải mã. Một U+001D trong payload xác nhận dấu phân tách nhóm đã được mã hoá ở chế độ byte.

  6. Kích hoạt chế độ byte có ảnh hưởng đến kích thước mã vạch không? Chế độ byte có thể yêu cầu nhiều bit dữ liệu hơn so với chế độ alphanumeric, điều này có thể đẩy ký hiệu lên phiên bản QR lớn hơn. Thư viện tự động chọn phiên bản nhỏ nhất phù hợp, vì vậy sự tăng thường chỉ là một bước phiên bản tối đa.

  7. Phiên bản nào của Aspose.BarCode đã giới thiệu tùy chọn này?
    Thuộc tính encode_gs1_separator_in_byte_mode đã được thêm vào Aspose.BarCode for Python via .NET 26.6. Các phiên bản trước yêu cầu thao tác byte thủ công để nhúng dấu phân cách nhóm.

Đọc thêm