Validasi Input dan Penanganan Kesalahan

Validasi Input dan Penanganan Kesalahan

Validasi Input dan Penanganan Kesalahan

Aspose.BarCode FOSS untuk Python memvalidasi semua data input sebelum proses encoding. Setiap simbologi memiliki subclass InputParser khusus yang memeriksa set karakter, batas panjang, dan aturan format. Ketika validasi gagal, pustaka mengeluarkan pengecualian bertipe dari hierarki BarcodeError sehingga pemanggil dapat membedakan antara masalah input, kegagalan encoding, dan masalah rendering.


Lapisan InputParser

Setiap simbologi mendaftarkan implementasi InputParser. Ketika Anda memanggil BarcodeService.generate(), parser dijalankan terlebih dahulu, menghasilkan NormalizedPayload atau menimbulkan InvalidInputError jika data tidak valid untuk simbologi tersebut.

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)

Setiap parser simbologi memvalidasi aturan yang berbeda:

  • Code128InputParser — memeriksa bahwa semua karakter berada dalam rentang ASCII yang didukung oleh set karakter Code 128
  • Code39InputParser — memvalidasi karakter terhadap alfabet dasar Code 39 atau alfabet ASCII penuh tergantung pada Code39Options.full_ascii
  • Ean13InputParser — memerlukan tepat 12 atau 13 digit numerik (digit ke-13 adalah digit cek)
  • Ean8InputParser — memerlukan tepat 7 atau 8 digit numerik
  • QrInputParser — memvalidasi data terhadap QrEncodeMode yang dipilih (NUMERIC, ALPHANUMERIC, BYTE, atau KANJI)
  • UpcaInputParser — memerlukan tepat 11 atau 12 digit numerik
  • UpceInputParser — memerlukan tepat 6, 7, atau 8 digit numerik dengan pola UPC-E yang valid

Hierarki BarcodeError

Semua pengecualian mewarisi dari BarcodeError, yang memperluas Exception bawaan Python. Hierarki memungkinkan blok catch pada tingkat spesifikasi yang berbeda:

ExceptionDilempar Ketika
BarcodeErrorKelas dasar untuk semua pengecualian library
InvalidInputErrorData masukan gagal validasi (karakter salah, panjang salah)
EncodingErrorLogika enkoding gagal setelah validasi berhasil
RenderingErrorRenderer mengalami kesalahan saat output SVG atau PNG
SymbologyNotFoundErrorNama simbologi tidak terdaftar di SymbologyRegistry
UnsupportedCapabilityErrorKemampuan yang diminta tidak tersedia untuk simbologi
UnsupportedFeatureErrorFitur didefinisikan tetapi belum diimplementasikan
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}")

Memvalidasi Nama Simbologi

SymbologyNotFoundError dilempar ketika BarcodeService.generate() menerima nama simbologi yang tidak terdaftar. SymbologyRegistry menyelesaikan nama berdasarkan nama kanonik atau alias, sehingga "code128", "Code128", dan "CODE128" semuanya menyelesaikan ke definisi yang sama.

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}")

Validasi Digit Pemeriksa

EAN-13, EAN-8, UPC-A, dan UPC-E simbologi menghitung digit pemeriksa secara otomatis. Jika Anda memberikan data lengkap termasuk digit pemeriksa, parser memverifikasinya terhadap nilai yang dihitung. Properti allow_check_digit_input pada Ean13Options dan Ean8Options mengontrol perilaku ini.

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),
)

Tips dan Praktik Terbaik

  • Tangkap InvalidInputError untuk formulir input yang dihadapi pengguna di mana data mungkin tidak memenuhi persyaratan simbologi
  • Gunakan BarcodeError sebagai penangkap umum hanya ketika Anda tidak perlu membedakan antara jenis kesalahan
  • Periksa nama simbologi terhadap tujuh simbologi yang didukung (code128, code39, ean13, ean8, qrcode, upca, upce) sebelum memanggil generate() untuk menghindari SymbologyNotFoundError
  • Untuk kode QR, atur encoding_mode secara eksplisit melalui QrOptions ketika data berisi karakter non-ASCII
  • Biarkan perpustakaan menghitung digit cek alih-alih menyediakannya secara manual — ini menghindari ketidakcocokan

Masalah Umum

MasalahPenyebabPerbaikan
InvalidInputError pada EAN-13Data memiliki kurang dari 12 digit atau berisi karakter non-numerikBerikan tepat 12 atau 13 digit numerik
SymbologyNotFoundErrorKesalahan ketik pada nama simbol (misalnya "code_128" alih-alih "code128")Gunakan nama kanonik tanpa garis bawah
EncodingError on Code 39Data mengandung huruf kecil tanpa full_ascii=TrueAtur Code39Options(full_ascii=True)
UnsupportedFeatureErrorMemanggil fitur yang sudah didefinisikan namun belum diimplementasikanPeriksa known_limitations pada profil simbol
InvalidInputError pada UPC-AData memiliki lebih dari 12 digitBerikan tepat 11 atau 12 digit numerik

FAQ

Bagaimana saya memeriksa apakah nama symbology valid sebelum menghasilkan?

Gunakan BarcodeService.registry untuk mengakses SymbologyRegistry. Panggil get_definition() dan tangkap SymbologyNotFoundError jika nama tidak terdaftar.

Bisakah saya menonaktifkan validasi digit cek untuk kode batang EAN?

Parser selalu memvalidasi digit cek ketika Anda menyediakan input dengan panjang penuh (13 digit untuk EAN-13, 8 untuk EAN-8). Untuk menghindari validasi, sediakan hanya digit data (12 untuk EAN-13, 7 untuk EAN-8) dan biarkan perpustakaan menghitung digit cek.

Apa yang terjadi jika saya mengirim data biner ke symbology kode batang 1D?

InvalidInputError dilempar. Code 128, Code 39, EAN, dan UPC symbologies hanya menerima data teks. Untuk data biner, gunakan QR Code dengan QrEncodeMode.BYTE.

Apakah pustaka memvalidasi panjang data untuk kode QR?

QrInputParser memvalidasi bahwa data sesuai dengan kapasitas versi QR yang diminta. Jika tidak ada versi yang ditentukan, pustaka memilih versi terkecil yang dapat menampung data tersebut.


Ringkasan API Reference

Kelas / MetodeDeskripsi
InputParser.parse(data, options)Metode abstrak — memvalidasi dan menormalkan input menjadi NormalizedPayload
Code128InputParser.parse(data, options)Memvalidasi karakter input Code 128
Code39InputParser.parse(data, options)Memvalidasi input Code 39 base atau full-ASCII
Ean13InputParser.parse(data, options)Memvalidasi jumlah digit EAN-13 dan digit cek
Ean8InputParser.parse(data, options)Memvalidasi jumlah digit EAN-8 dan digit cek
QrInputParser.parse(data, options)Memvalidasi data QR terhadap mode enkode yang dipilih
UpcaInputParser.parse(data, options)Memvalidasi jumlah digit UPC-A
UpceInputParser.parse(data, options)Memvalidasi jumlah digit UPC-E dan pola
BarcodeErrorPengecualian dasar untuk pustaka barcode
InvalidInputErrorDilempar untuk data input yang tidak valid
EncodingErrorDilempar ketika enkoding gagal
RenderingErrorDibangkitkan ketika rendering gagal
SymbologyNotFoundErrorDibangkitkan untuk nama simbolologi yang tidak terdaftar
UnsupportedCapabilityErrorDilempar untuk kapabilitas yang tidak tersedia
UnsupportedFeatureErrorDilempar untuk fitur yang belum diimplementasikan

Lihat Juga

 Bahasa Indonesia