Looking to hire Laravel developers? Try LaraJobs

persian-tools-laravel maintained by fallahalireza

Description
A powerful Laravel package for Persian text utilities, Iranian validation rules, banking tools, national identifiers, Jalali dates, and more.
Last update
2026/05/25 10:29 (dev-main)
License
Links
Downloads
5

Comments
comments powered by Disqus

🇮🇷 Persian Tools for Laravel

PHP Version Laravel License

A powerful and comprehensive Laravel validation package for Persian text, Iranian identifiers, banking, dates, license plates, and more.

Developed by Alireza Fallahfallahalireza/persian-tools-laravel


✨ What makes this package different?

Feature This Package Others
کد اقتصادی validation
پلاک خودرو validation
شماره حساب بانکی
Bank detection from card BIN
Type-safe PersianRule Enum
Luhn algorithm for bank cards
Full IBAN (Sheba) checksum
National ID checksum
MobileFormat Enum

📦 Installation

composer require fallahalireza/persian-tools-laravel

Publish config (optional)

php artisan vendor:publish --tag="persian-tools-config"

Publish language files (optional)

php artisan vendor:publish --tag="persian-tools-lang"

⚙️ Configuration

config/persian-tools.php:

return [
    // Register rules as Laravel validator strings (default: true)
    'register_rules' => true,

    // Accept Persian digits globally (default: false)
    'accept_persian_numbers' => false,
];

🚀 Usage

String-based (when register_rules = true)

$rules = [
    'name'        => 'required|persian_alpha',
    'mobile'      => 'required|ir_mobile',
    'national_id' => 'required|ir_national_id',
    'birth_date'  => 'required|persian_date',
    'card'        => 'required|ir_bank_card',
    'plate'       => 'required|ir_license_plate',
    'eco_code'    => 'required|ir_economic_code',
];

Class-based (always works)

use FallahAlireza\PersianTools\Rules\PersianAlpha;
use FallahAlireza\PersianTools\Rules\IranianNationalId;
use FallahAlireza\PersianTools\Rules\IranianMobile;
use FallahAlireza\PersianTools\Rules\IranianBankCardNumber;
use FallahAlireza\PersianTools\Enums\MobileFormat;

$rules = [
    'name'   => ['required', new PersianAlpha],
    'mobile' => ['required', new IranianMobile(format: MobileFormat::Zero)],
    'card'   => ['required', new IranianBankCardNumber(separator: '-')],
];

Type-safe Enum

use FallahAlireza\PersianTools\Enums\PersianRule;

$rules = [
    'name'   => ['required', PersianRule::PersianAlpha->value],
    'mobile' => ['required', PersianRule::IranianMobile->value],
];

📋 All Validation Rules

🔤 Persian Text & Numbers

Rule Class Description Valid Invalid
persian_alpha PersianAlpha حروف فارسی، علائم و فاصله سلام، علی‌رضا Hello
persian_alpha_num PersianAlphaNum حروف + اعداد فارسی سلام۱۲۳ Hello 123
persian_alpha_eng_num PersianAlphaEngNum حروف فارسی + اعداد فارسی/انگلیسی سلام123 Hello
persian_num PersianNum فقط اعداد فارسی ۱۲۳۴۵ 12345
persian_not_accept PersianNotAccept رد کردن هر چیز فارسی Hello 123 سلام

📅 Persian Dates

Rule Parameters Description
persian_date separator, convertPersianNumbers تاریخ شمسی معتبر
persian_date_between startDate, endDate, separator, convertPersianNumbers تاریخ بین دو تاریخ
persian_month نام ماه شمسی
persian_day نام روز هفته
// Validates 1403/01/01 (not inclusive)
new PersianDateBetween('1400/01/01', '1403/12/29')

// Custom separator
new PersianDate(separator: '-') // e.g. 1403-06-31

📱 Phone Numbers

Rule Class Parameters Valid
ir_mobile IranianMobile format, convertPersianNumbers 09123456789, +98912...
ir_phone IranianPhone withAreaCode, areaCodeSeparator, withCountryCodeFormat, convertPersianNumbers 02112345678
ir_phone_area_code IranianPhoneAreaCode convertPersianNumbers 021, 031
use FallahAlireza\PersianTools\Enums\MobileFormat;

new IranianMobile(format: MobileFormat::Zero)      // 09123456789 only
new IranianMobile(format: MobileFormat::PlusCode)  // +989123456789 only
new IranianPhone(withAreaCode: true, areaCodeSeparator: '-') // 021-12345678

MobileFormat options: All, ZeroCode (0098...), PlusCode (+98...), Code (98...), Zero (0...), Normal (9...)

🪪 Identifiers

Rule Class Description Valid
ir_national_id IranianNationalId کد ملی (با checksum) 0013542419
ir_company_id IranianCompanyId شناسه ملی اشخاص حقوقی 14007650912
ir_economic_code IranianEconomicCode کد اقتصادی ۱۴ رقمی 14004800101010

🏦 Banking

Rule Class Description
ir_bank_card IranianBankCardNumber کارت بانکی (Luhn + BIN detection)
ir_iban IranianIban شماره شبا (IBAN checksum)
ir_bank_account IranianBankAccountNumber شماره حساب بانکی
// Detect bank name from card
$rule = new IranianBankCardNumber();
$bank = $rule->detectBank('6037991234567890'); // "بانک ملی ایران"

// Card with dash separator
new IranianBankCardNumber(separator: '-') // 6037-9912-3456-7890

// IBAN without IR prefix
new IranianIban(withPrefix: false)

📍 Other

Rule Class Parameters Description
ir_postal_code IranianPostalCode separator کد پستی ۱۰ رقمی
ir_license_plate IranianLicensePlate allowMotorcycle پلاک خودرو
new IranianLicensePlate()                          // 12الف34567
new IranianLicensePlate(allowMotorcycle: true)     // also 123456789

🌐 Localization

The package supports fa and en error messages.

Set your app locale in config/app.php:

'locale' => 'fa',

Or per-request:

app()->setLocale('fa');

🧪 Testing

composer test

📄 License

MIT License — Alireza Fallah