فهرست مستندات پروژه
ابزارهای بانکی
پرداخت شامل آبجکتهای مقداری برای اعتبارسنجی و کار با شماره کارتهای بانکی ایرانی و شماره شبا (IBAN) است.
CardNumber
آبجکت مقداری برای شماره کارتهای بانکی ایرانی ۱۶ رقمی با اعتبارسنجی Luhn و تشخیص خودکار بانک.
ساخت و اعتبارسنجی
use Eram\Pardakht\Banking\CardNumber;
// ساخت با اعتبارسنجی (در صورت نامعتبر بودن خطا پرتاب میکند)
$card = new CardNumber('6037991234567890');
$card = new CardNumber('6037-9912-3456-7890'); // خطتیرهها حذف میشوند
// اعتبارسنجی استاتیک (بدون خطا)
CardNumber::isValid('6037991234567890'); // true
CardNumber::isValid('1234567890123456'); // false (بررسی Luhn ناموفق)
ساخت در صورت زیر \InvalidArgumentException پرتاب میکند:
- شماره دقیقاً ۱۶ رقم نباشد
- چکسام Luhn ناموفق باشد
فرمتبندی
$card = new CardNumber('6037991234567890');
$card->number(); // "6037991234567890"
$card->formatted(); // "6037-9912-3456-7890"
$card->masked(); // "603799******7890"
تشخیص بانک
$card = new CardNumber('6037991234567890');
$card->bankName(); // "ملی" (یا null اگر BIN ناشناخته باشد)
تشخیص بانک از ۶ رقم اول (BIN) برای شناسایی بانک صادرکننده استفاده میکند.
مقایسه
$a = new CardNumber('6037991234567890');
$b = new CardNumber('6037-9912-3456-7890');
$a->equals($b); // true
Sheba (شبا)
آبجکت مقداری برای شبای ایرانی (شماره حساب بانکی بینالمللی) با اعتبارسنجی چکسام ISO 13616 و تشخیص بانک.
فرمت شبای ایرانی: IR + ۲ رقم کنترلی + ۲۲ رقم = مجموعاً ۲۶ کاراکتر.
ساخت و اعتبارسنجی
use Eram\Pardakht\Banking\Sheba;
// با یا بدون پیشوند IR
$sheba = new Sheba('IR062960000000100324200001');
$sheba = new Sheba('062960000000100324200001'); // IR خودکار اضافه میشود
// اعتبارسنجی استاتیک
Sheba::isValid('IR062960000000100324200001'); // true
ساخت در صورت زیر \InvalidArgumentException پرتاب میکند:
- فرمت IR + ۲۴ رقم نباشد
- چکسام mod-97 طبق ISO 13616 ناموفق باشد
خواندن مقادیر
$sheba = new Sheba('IR062960000000100324200001');
$sheba->value(); // "IR062960000000100324200001"
$sheba->digits(); // "062960000000100324200001" (بدون پیشوند IR)
فرمتبندی
$sheba->formatted(); // "IR06 2960 0000 0010 0324 2000 01"
تشخیص بانک
$sheba->bankName(); // "ملت" (یا null اگر کد بانک ناشناخته باشد)
تشخیص بانک از کد بانک موجود در شبا (ارقام ۵ تا ۷ بعد از IR) استفاده میکند.
مقایسه
$a = new Sheba('IR062960000000100324200001');
$b = new Sheba('062960000000100324200001');
$a->equals($b); // true
BankIdentifier
کلاس BankIdentifier متدهای استاتیک برای تشخیص بانک بدون ساخت آبجکت مقداری فراهم میکند:
use Eram\Pardakht\Banking\BankIdentifier;
BankIdentifier::fromCardNumber('6037991234567890'); // "ملی"
BankIdentifier::fromSheba('IR062960000000100324200001'); // "ملت"
هر دو متد ?string برمیگردانند — اگر کد بانک در پایگاه داده نباشد null برمیگردد.