التحقق من صحة الإدخال ومعالجة الأخطاء
التحقق من صحة الإدخال ومعالجة الأخطاء
Aspose.BarCode FOSS لـ Python يتحقق من صحة جميع بيانات الإدخال قبل الترميز. كل رمزية لها فئة فرعية InputParser مخصصة تتحقق من مجموعات الأحرف، قيود الطول، وقواعد التنسيق. عندما تفشل عملية التحقق، ترفع المكتبة استثناءات ذات نوعية من تسلسل BarcodeError حتى يتمكن المستدعون من التمييز بين مشاكل الإدخال، فشل الترميز، ومشكلات العرض.
طبقة InputParser
كل رمزية تسجل تنفيذ InputParser. عندما تستدعي BarcodeService.generate()، يعمل المحلل أولاً، وينتج NormalizedPayload أو يرفع InvalidInputError إذا كانت البيانات غير صالحة لتلك الرمزية.
from aspose_barcode_foss import BarcodeService
service = BarcodeService()
# Valid Code 128 input — passes the Code128InputParser
barcode = service.generate("code128", "VALID-DATA-001")
# Invalid EAN-13 input — too few digits
try:
barcode = service.generate("ean13", "123")
except Exception as e:
print(type(e).__name__, e)كل محلل رمزية يتحقق من قواعد مختلفة:
Code128InputParser— يتحقق من أن جميع الأحرف ضمن نطاق ASCII المدعوم من مجموعات أحرف Code 128Code39InputParser— يتحقق من الأحرف مقابل قاعدة Code 39 أو أبجدية ASCII الكاملة اعتمادًا علىCode39Options.full_asciiEan13InputParser— يتطلب بالضبط 12 أو 13 رقمًا عدديًا (الرقم 13 هو رقم التحقق)Ean8InputParser— يتطلب بالضبط 7 أو 8 أرقام عدديةQrInputParser— يتحقق من صحة البيانات وفقًا للـQrEncodeModeالمحدد (NUMERIC، ALPHANUMERIC، BYTE، أو KANJI)UpcaInputParser— يتطلب بالضبط 11 أو 12 أرقام عدديةUpceInputParser— يتطلب بالضبط 6 أو 7 أو 8 أرقام عددية مع نمط UPC-E صالح
التسلسل الهرمي BarcodeError
جميع الاستثناءات ترث من BarcodeError، التي توسّع Exception المدمج في Python. يسمح التسلسل الهرمي بكتل catch على مستويات مختلفة من التحديد:
| Exception | يُرفع عندما |
|---|---|
BarcodeError | الفئة الأساسية لجميع استثناءات المكتبة |
InvalidInputError | بيانات الإدخال تفشل في التحقق (أحرف غير صحيحة، طول غير صحيح) |
EncodingError | منطق الترميز يفشل بعد نجاح التحقق |
RenderingError | Renderer يواجه خطأً أثناء إخراج SVG أو PNG |
SymbologyNotFoundError | اسم symbology غير مسجَّل في SymbologyRegistry |
UnsupportedCapabilityError | القدرة المطلوبة غير متوفرة للـsymbology |
UnsupportedFeatureError | الميزة معرفة لكنها غير مُنفَّذة |
from aspose_barcode_foss import BarcodeService
from aspose_barcode_foss.errors import (
BarcodeError,
InvalidInputError,
EncodingError,
SymbologyNotFoundError,
)
service = BarcodeService()
try:
barcode = service.generate("code128", "TEST-001")
svg = barcode.to_svg()
except InvalidInputError as e:
print(f"Input rejected: {e}")
except EncodingError as e:
print(f"Encoding failed: {e}")
except SymbologyNotFoundError as e:
print(f"Unknown symbology: {e}")
except BarcodeError as e:
print(f"Barcode error: {e}")التحقق من صحة أسماء الرموز
SymbologyNotFoundError يُرفع عندما يتلقى BarcodeService.generate() اسم رموز غير مسجل. الـSymbologyRegistry يحل الأسماء بالاسم القانوني أو الاسم المستعار، لذا فإن "code128" و"Code128" و"CODE128" كلها تُحل إلى نفس التعريف.
from aspose_barcode_foss import BarcodeService
from aspose_barcode_foss.errors import SymbologyNotFoundError
service = BarcodeService()
try:
barcode = service.generate("invalid_type", "data")
except SymbologyNotFoundError as e:
print(f"Not found: {e}")التحقق من رقم التحقق
رموز EAN-13 و EAN-8 و UPC-A و UPC-E تحسب أرقام التحقق تلقائيًا. إذا قمت بتمرير البيانات الكاملة بما فيها رقم التحقق، فإن المحلل يتحقق منها مقابل القيمة المحسوبة. خاصية allow_check_digit_input على Ean13Options وEan8Options تتحكم في هذا السلوك.
from aspose_barcode_foss import BarcodeService
from aspose_barcode_foss import Ean13Options
service = BarcodeService()
# 12 digits — check digit computed automatically
barcode = service.generate("ean13", "590123412345")
# 13 digits — parser verifies the 13th digit matches the computed value
barcode = service.generate(
"ean13", "5901234123457",
encode=Ean13Options(allow_check_digit_input=True),
)نصائح وأفضل الممارسات
- التقط
InvalidInputErrorلنماذج الإدخال الموجهة للمستخدم حيث قد لا تستوفي البيانات متطلبات الرموز - استخدم
BarcodeErrorكملحق شامل فقط عندما لا تحتاج إلى التمييز بين أنواع الأخطاء - تحقق من اسم الرموز مقابل الرموز السبع المدعومة (code128, code39, ean13, ean8, qrcode, upca, upce) قبل استدعاء
generate()لتجنبSymbologyNotFoundError - بالنسبة لأكواد QR، اضبط
encoding_modeصراحةً عبرQrOptionsعندما تحتوي البيانات على أحرف غير ASCII - دع المكتبة تحسب أرقام التحقق بدلاً من تزويدها يدويًا — هذا يتجنب الاختلافات
المشكلات الشائعة
| مشكلة | السبب | إصلاح |
|---|---|---|
InvalidInputError على EAN-13 | البيانات تحتوي على أقل من 12 رقمًا أو تحتوي على أحرف غير رقمية | قدّم بالضبط 12 أو 13 رقمًا رقميًا |
SymbologyNotFoundError | خطأ إملائي في اسم الرموز (مثلًا "code_128" بدلاً من "code128") | استخدم الاسم القياسي بدون شرطات سفلية |
EncodingError على Code 39 | البيانات تحتوي على أحرف صغيرة بدون full_ascii=True | تعيين Code39Options(full_ascii=True) |
UnsupportedFeatureError | استدعاء ميزة معرفة لكنها لم تُطبق بعد | تحقق من known_limitations على ملف تعريف الرموز |
InvalidInputError على UPC-A | البيانات تحتوي على أكثر من 12 رقمًا | قدّم بالضبط 11 أو 12 رقمًا |
FAQ
كيف أتحقق مما إذا كان اسم الترميز صالحًا قبل الإنشاء؟
استخدم BarcodeService.registry للوصول إلى SymbologyRegistry. استدعِ get_definition() والتقط SymbologyNotFoundError إذا لم يكن الاسم مسجلاً.
هل يمكنني تعطيل التحقق من أرقام التحقق لباركودات EAN؟
يقوم المحلل دائمًا بالتحقق من أرقام التحقق عندما تزود الإدخال بطوله الكامل (13 رقمًا لـ EAN-13، 8 لأجل EAN-8). لتجنب التحقق، زوِّد فقط أرقام البيانات (12 لـ EAN-13، 7 لـ EAN-8) ودع المكتبة تحسب رقم التحقق.
ماذا يحدث إذا قمت بتمرير بيانات ثنائية إلى ترميز باركود أحادي الأبعاد؟
InvalidInputError تم رفعه. Code 128، Code 39، EAN، وUPC لا تقبل سوى البيانات النصية. للبيانات الثنائية، استخدم QR Code مع QrEncodeMode.BYTE.
هل تتحقق المكتبة من طول البيانات لأكواد QR؟
QrInputParser يتحقق من أن البيانات تتناسب مع سعة الإصدار المطلوب من QR. إذا لم يتم تحديد إصدار، تختار المكتبة أصغر إصدار يمكنه استيعاب البيانات.
ملخص API Reference
| فئة / طريقة | وصف |
|---|---|
InputParser.parse(data, options) | طريقة مجردة — تتحقق من صحة وتطبع الإدخال إلى NormalizedPayload |
Code128InputParser.parse(data, options) | يتحقق من صحة أحرف الإدخال Code 128 |
Code39InputParser.parse(data, options) | يتحقق من صحة إدخال Code 39 الأساسي أو كامل ASCII |
Ean13InputParser.parse(data, options) | يتحقق من عدد أرقام EAN-13 ورقم التحقق |
Ean8InputParser.parse(data, options) | يتحقق من عدد أرقام EAN-8 ورقم التحقق |
QrInputParser.parse(data, options) | يتحقق من بيانات QR وفق وضع الترميز المحدد |
UpcaInputParser.parse(data, options) | يتحقق من عدد أرقام UPC-A |
UpceInputParser.parse(data, options) | يتحقق من عدد أرقام UPC-E والنمط |
BarcodeError | استثناء أساسي لمكتبة الباركود |
InvalidInputError | يُرفع لبيانات الإدخال غير الصالحة |
EncodingError | يُرفع عندما يفشل الترميز |
RenderingError | يُرفع عندما تفشل عملية العرض |
SymbologyNotFoundError | يُرفع لأسماء الرموز غير المسجلة |
UnsupportedCapabilityError | تم الرفع لعدم توفر الإمكانيات |
UnsupportedFeatureError | تم الرفع للميزات غير المنفذة |