تولید یک بارکد GS1QR ساده است تا زمانی که بار داده شامل یک جداساز گروه باشد. آن کاراکتر غیرقابل چاپ تک، ASCII 29، همان چیزی است که به اسکنر می‌گوید فیلد شناسه برنامه با طول متغیر کجا پایان می‌یابد. توسعه‌دهندگان با ترکیب دستی بایت‌ها، رمزگذارهای سفارشی یا تقسیم بار داده دور زدن این مشکل را انجام دادند و هر راه‌حل جایگزین خطر تولید نمادهایی را داشت که اسکن می‌شوند اما تجزیه نمی‌شوند.

Aspose.BarCode for Python via .NET 26.6 این مشکل را با یک پرچم واحد برطرف می‌کند. ویژگی encode_gs1_separator_in_byte_mode مجبور می‌کند رمزگذار QR جداکننده‌های گروه GS1 و کاراکتر % را به صورت بایت‌های خام بنویسد و ساختار دقیق GS1 را حفظ کند. این آموزش تمام جریان کار تولید و شناسایی بارکد را در python‑net پوشش می‌دهد: نصب SDK، تولید نماد GS1QR سازگار، و تأیید در سطح نقطه کد که جداکننده پس از عبور از مسیر دوطرفه زنده مانده است.

چرا جداکننده‌های GS1 در حالت بایت برای بارکدهای GS1QR مهم هستند

GS1QR حامل دو‑بعدی مورد انتخاب در زنجیره تأمین، بهداشت و درمان و خرده‌فروشی است، جایی که یک نماد واحد باید شناسه محصول، شمارهٔ دسته، تاریخ انقضا و شماره سریال را در یک بار دادهٔ ساختاریافته نگه دارد. نحو شناسهٔ کاربردی GS1 این امکان را فراهم می‌کند، اما برای جداسازی فیلدهایی که طول ثابت ندارند به Group Separator وابسته است.

در نظر بگیرید یک بارگذاری که AI (10) را برای شمارهٔ دسته و AI (21) را برای شمارهٔ سری ترکیب می‌کند. هر دو طول متغیر دارند، بنابراین اسکنر به یک مرز صریح بین آن‌ها نیاز دارد. بدون یک جداکنندهٔ به‌درستی کدگذاری‌شده، سیستم پایین‌دست یک رشتهٔ ترکیبی می‌خواند به‌جای دو فیلد. بارکد با موفقیت اسکن می‌شود اما همچنان دادهٔ اشتباهی را تحویل می‌دهد، بدترین نوع شکست، زیرا هیچ‌چیزی در رویداد اسکن مشکل را نشان نمی‌دهد.

کدگذاری حالت بایت این مشکل را در منبع حل می‌کند. رمزگذار تفسیر جداکننده را به‌عنوان یک نشانگر ساختاری متوقف می‌کند و آن را به‌صورت کلمه به کلمه در بخش داده می‌نویسد. مزایای عملی برای توسعه‌دهندگان پایتون مستقیم است:

  • تطبیق. نماد صادر شده با مشخصات کلی GS1 مطابقت دارد و نه اینکه به‌صورت تخمینی باشد.
  • کد ساده‌تر. بدون ترکیب دستی بایت‌ها، بدون زیرکلاس سفارشی رمزگذار، بدون عبور پس‌پردازشی.
  • قابلیت تست. مسیر دوطرفه در یک تست واحد قابل تأیید است با بررسی نقاط کد رمزگشایی شده.

ایجاد بارکدهای GS1QR با استفاده از Aspose.BarCode for Python

Aspose.BarCode for Python via .NET یک API سطح بالا برای تولید و تشخیص بارکد فراهم می‌کند. آن را از PyPI نصب کنید:

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

دو کلاس بیشتر کارها را انجام می‌دهند. BarcodeGenerator، از aspose.barcode.generation، نمادها را می‌سازد و رندر می‌کند. BarCodeReader، از aspose.barcode.barcoderecognition، آن‌ها را رمزگشایی می‌کند. تنظیمات تولید از طریق یک درخت پارامتر در نمونه‌ی ژنراتور قابل دسترسی است، جایی که گزینه‌های مخصوص سمبولولوژی مانند تنظیمات QR زیر parameters.barcode.qr قرار دارند.

مواد مرجع در صفحه محصول، سایت مستندات، و مرجع API.

اگر فایل لایسنس دارید، آن را یک‌بار در هنگام راه‌اندازی برنامه، قبل از هر فراخوانی تولید یا تشخیص اعمال کنید:

from aspose.barcode import License

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

تولید بارکد GS1QR با جداکننده بایت-مود

  1. وارد کردن انواع مورد نیاز - BarcodeGenerator و EncodeTypes برای تولید، BarCodeReader و DecodeType برای تأیید.
  2. ایجاد نمونه‌ای از BarcodeGenerator با EncodeTypes.GS1QR و یک رشته بارگذاری GS1. پرانتزها بخش‌های AI را نشان می‌دهند، مانند (10)ASPOSE2001(21)ASPOSE2026.
  3. فعال‌سازی رمزگذاری جداکننده در حالت بایت با تنظیم gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True.
  4. تنظیم وضوح خروجی به‌طوری که نماد رندر شده هم برای چاپ و هم برای نمایش روی صفحه قابل استفاده باشد.
  5. ذخیره تصویر به فرمت بدون افت کیفیت، سپس آن را دوباره بخوانید تا رمزگذاری را تأیید کنید.

مثال زیر جریان کاری کامل را نشان می‌دهد:

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)

نحوه کار

  • BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026") یک ژنراتور را که برای سمبولیسم GS1QR پیکربندی شده است، ایجاد می‌کند. بار داده از سینتکس GS1 استفاده می‌کند، که در آن (10) شناسه AI شماره دسته یا لوت و (21) شناسه AI شماره سریال است. کتابخانه فرم داخل پرانتز را تجزیه می‌کند و جداکننده‌هایی که مشخصات می‌طلبند، وارد می‌کند.
  • gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True گزینه‌ای را که در نسخه 26.6 معرفی شده فعال می‌کند. با فعال بودن این گزینه، رمزگذار جداکننده گروه و % را به‌عنوان بایت‌های خام در بخش داده می‌نویسد به‌جای این‌که آن‌ها را تفسیر کند.
  • gen.parameters.resolution = 300 با وضوح 300 DPI رندر می‌شود. نمادهای فقط‑صفحه نمایش در حالت پیش‌فرض مناسب هستند، اما هر چیزی که برای چاپگر برچسب یا طرح بسته‌بندی هدف‌گذاری شده است، باید با وضوح چاپ تولید شود نه اینکه پس از آن بزرگ‌نمایی شود.
  • gen.save("gs1qr_test.png") یک فایل PNG بدون فشرده‌سازی می‌نویسد و الگوی دقیق ماژول‌ها را حفظ می‌کند. این برای نمادهای دو‑بعدی بیشتر از یک‑بعدی اهمیت دارد، زیرا یک رمزگشای QR شبکه‌ای را نمونه‌برداری می‌کند و نسبت به مرزهای ماژول‌های تار شده تحمل کمی دارد.
  • read_bar_codes() یک قابل تکرار از اشیاء BarCodeResult برمی‌گرداند و result.code_text بار دادهٔ رمزگشایی‌شده را شامل هر کاراکتر کنترلی نگه می‌دارد. در یک کنسول، جداکننده به‌صورت هیچ چیزی نمایش داده نمی‌شود، به همین دلیل بخش بعدی به جای اعتماد به خروجی چاپ‌شده، نقاط کد را بررسی می‌کند.

خواندن و تأیید بارکد تولید شده

چاپ رشتهٔ رمزگشایی‌شده ثابت می‌کند که نماد قابل خواندن است، نه اینکه درست باشد. از آنجا که جداکنندهٔ گروه غیرقابل چاپ است، یک بارگذاری با جداکنندهٔ گمشده و یک بارگذاری با جداکنندهٔ صحیح در ترمینال یکسان به نظر می‌رسند. تأیید باید در سطح نقطهٔ کد انجام شود، که این کار را نیز در یک مجموعهٔ تست به سادگی امکان‌پذیر می‌سازد.

مراحل

  1. فایل PNG ذخیره‌شده را با BarCodeReader و DecodeType.GS1QR بارگذاری کنید.
  2. بر نتایج رمزگشایی‌شده تکرار کنید.
  3. کد نقطه یونیکد هر کاراکتر را بررسی کنید و به دنبال U+001D بگردید.
  4. payload را بر اساس جداکننده تقسیم کنید و فیلدها را با ورودی اصلی مقایسه کنید.
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.")

چگونه کار می‌کند

  • پیکربندی خواننده با DecodeType.GS1QR شناسایی را به این نماد محدود می‌کند، که هم سریع‌تر و هم ایمن‌تر از اسکن تمام انواع است، زیرا از رمزگشایی یک نماد خراب به عنوان QR ساده جلوگیری می‌کند و به‌صورت ساکت عبور نمی‌دهد.
  • تبدیل نتایج به list(...) قبل از بررسی، حالت خالی را به‌وضوح نشان می‌دهد. یک شکست در شناسایی یک iterable خالی برمی‌گرداند به‌جای پرتاب استثنا، بنابراین یک حلقه for بدون محافظ بر روی خواندن ناموفق به‌صورت ساکت تمام می‌شود و موفقیت را گزارش می‌دهد.
  • حلقه‌ی code-point ادعای واقعی است. مشاهده U+001D در خروجی تأیید می‌کند که حالت بایت کار کرده است؛ عدم حضور آن به این معنی است که جداکننده حذف یا تبدیل شده است، صرف‌نظر از اینکه بار چاپ‌شده چقدر تمیز به نظر برسد.
  • تقسیم بر پایه \x1d فیلدهای AI جداگانه را بازسازی می‌کند و مقادیری را در اختیار شما می‌گذارد که می‌توانند در یک خط لوله CI با داده‌های منبع مقایسه شوند.

دریافت یک لایسنس رایگان

Aspose یک مجوز موقت رایگان ارائه می‌دهد که علامت‌های ارزیابی را حذف می‌کند و عملکرد کامل را برای تست فعال می‌سازد. یک مورد را از صفحه مجوز موقت Aspose درخواست کنید.

منابع اضافی رایگان

نتیجه‌گیری

گزینه encode_gs1_separator_in_byte_mode یک دسته از پردازش‌های دستی بایت را با یک مقدار بولی جایگزین می‌کند. با تنظیم آن در پارامترهای QR، جداکننده‌های گروه GS1 همراه با کاراکتر % دقیقاً همان‌طور که مشخصات می‌طلبند، در نماد نوشته می‌شوند.

این آموزش نصب، تولید نماد GS1QR با جداکننده‌های حالت بایت، و تأیید نتیجه در سطح نقطه کد را به جای اعتماد به خروجی کنسول پوشش داد. آن مرحلهٔ تأیید بخشی است که بیشترین ارزش را دارد. در جریان‌های کاری GS1، بارکدی که اسکن می‌شود همان بارکد صحیح نیست، و یک ادعای نقطه کد در مجموعه تست‌های شما است که این دو را قبل از رسیدن برچسب‌ها به تولید از هم جدا می‌کند.

سوالات متداول

  1. گزینه encode_gs1_separator_in_byte_mode چه کاری انجام می‌دهد؟ این گزینه به رمزگذار QR می‌گوید که جداکننده گروه GS1 (ASCII 29) و کاراکتر % را به‌عنوان داده بایت خام تولید کند، به‌جای اینکه آنها را به‌عنوان نشانگرهای ساختاری در نظر بگیرد، به‌طوری که در محتوای بارکد به‌صورت کامل باقی بمانند.

  2. آیا برای استفاده از ویژگی‌های GS1QR به مجوز خاصی نیاز دارم؟ GS1QR بخشی از کتابخانه استاندارد Aspose.BarCode است. می‌توانید آن را بدون مجوز ارزیابی کنید و برای حذف علامت‌های آب‌نمای ارزیابی، یک مجوز موقت رایگان از وب‌سایت Aspose درخواست کنید.

  3. آیا می‌توانم از این ویژگی با انواع دیگر کد QR استفاده کنم؟ خیر. این پرچم برای نوع رمزگذاری GS1QR اعمال می‌شود. رمزگذارهای QR استاندارد و میکرو QR آن را نادیده می‌گیرند، زیرا تجزیه شناسه برنامه GS1 بر روی آن‌ها اعمال نمی‌شود.

  4. آیا تصویر بارکد تولید شده بدون افت کیفیت است؟ ذخیره به صورت PNG، که پیش‌فرض است، یک تصویر بدون افت کیفیت تولید می‌کند که الگوی دقیق ماژول‌ها را حفظ می‌کند. از JPEG برای بارکدها خودداری کنید، زیرا آثار فشرده‌سازی آن لبه‌های ماژول را محو می‌کند و نرخ خواندن را کاهش می‌دهد.

  5. چگونه می‌توانم تأیید کنم که جداکننده به‌درستی کدگذاری شده است؟ تصویر را با BarCodeReader و با استفاده از DecodeType.GS1QR دوباره بخوانید و نقاط کد رشتهٔ رمزگشایی‌شده را بررسی کنید. یک U+001D در بارگذاری تأیید می‌کند که جداکنندهٔ گروه در حالت بایت کدگذاری شده است.

  6. آیا فعال‌سازی حالت بایت بر اندازه بارکد تأثیر می‌گذارد؟ حالت بایت می‌تواند نسبت به حالت الفبایی-عددیک بیشتر بیت داده نیاز داشته باشد، که ممکن است نماد را به نسخه بزرگ‌تری از QR منتقل کند. کتابخانه به‌طور خودکار کوچک‌ترین نسخه‌ای را که متناسب است انتخاب می‌کند، بنابراین افزایش معمولاً حداکثر یک گام نسخه است.

  7. کدام نسخه از Aspose.BarCode این گزینه را معرفی کرد؟ ویژگی encode_gs1_separator_in_byte_mode در Aspose.BarCode for Python via .NET 26.6 اضافه شد. نسخه‌های قبلی برای درج جداکننده‌های گروه نیاز به دستکاری بایت به صورت دستی دارند.

بیشتر بخوانید