אימות קלט וטיפול בשגיאות

אימות קלט וטיפול בשגיאות

אימות קלט וטיפול בשגיאות

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 128
  • Code39InputParser — מאמת תווים מול האלפבית הבסיסי של Code 39 או אלפבית ASCII מלא בהתאם ל-Code39Options.full_ascii
  • Ean13InputParser — דורש בדיוק 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הממעבד נתקל בשגיאה במהלך פלט SVG או PNG
SymbologyNotFoundErrorשם הסימבוליקה אינו רשום ב-SymbologyRegistry
UnsupportedCapabilityErrorיכולת מבוקשת אינה זמינה עבור הסימבוליקה
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נזרק עבור תכונות שלא מומשו

ראה גם

 עברית