BzBankInput / IranValidation

ابزار ایرانی

تقویم شمسی، اعتبارسنجی کد ملی و شبا و کارت، و اینپوت آماده ی شماره های بانکی.

تقویم شمسی

نمای ماهانه با رویدادهای رنگی و تشخیص تعطیلات.

شیدسچپج
جلسه تیم

انتخاب: 1405/05/20

razor
@using BzCore.Components.Calendar
@using BzCore.Enums

<BzCalendarView SelectedDate="_picked"
                OnDayClick="@(d => _picked = d)"
                Events="_events"
                Calendar="BzCalendarType.Jalali"
                ShowHolidays="true" />

<p>انتخاب: @_picked.ToString("yyyy/MM/dd")</p>

@code {
    private DateTime _picked = DateTime.Today;

    // BzCalendarEvent(date, title, color)
    private List<BzCalendarEvent> _events = new()
    {
        new(DateTime.Today, "جلسه تیم", BzColor.Primary),
        new(DateTime.Today.AddDays(2), "تحویل پروژه", BzColor.Danger),
        new(DateTime.Today.AddDays(5), "انتشار نسخه", BzColor.Success),
    };
}
اعتبارسنجی زنده

کلاس استاتیک IranValidation بدون هیچ کامپوننتی هم قابل استفاده است — مثلا در سرویس ها.

کد ملی
موبایل
شماره کارت
شبا
متد توضیح
IsNationalCode(s)کد ملی 10 رقمی با رقم کنترلی
IsMobile(s)شماره موبایل ایران
IsBankCard(s)کارت 16 رقمی با الگوریتم لان
GetCardBank(s)نام بانک از روی شماره کارت
IsIban(s)شماره شبا با بررسی استاندارد mod97
GetIbanBank(s)نام بانک از روی شبا
razor
@using BzCore.Components.Input
@using BzCore.Enums

<BzInput TValue="string" @bind-Value="_nc" Label="کد ملی"
         CharFilter="BzCharFilter.NumberOnly" MaxLength="10"
         UpdateTrigger="BzUpdateTrigger.OnInput" StartIcon="fa-solid fa-id-card" />

<span class="iz @(string.IsNullOrEmpty(_nc) ? "" : (IranValidation.IsNationalCode(_nc) ? "ok" : "bad"))">
    @(string.IsNullOrEmpty(_nc) ? "" : (IranValidation.IsNationalCode(_nc) ? "معتبر" : "نامعتبر"))
</span>

<BzInput TValue="string" @bind-Value="_card" Label="شماره کارت"
         Mode="BzInputMode.Mask" Mask="####-####-####-####"
         UpdateTrigger="BzUpdateTrigger.OnInput" />

@if (!string.IsNullOrEmpty(_card))
{
    <span>
        @(IranValidation.IsBankCard(_card) ? "معتبر" : "نامعتبر")
        @if (IranValidation.GetCardBank(_card) is { } bank)
        {
            <text> — بانک @bank</text>
        }
    </span>
}

@code {
    private string? _nc;
    private string? _card;
}

@*
IranValidation is a plain static class — use it anywhere, even outside Blazor:

    IranValidation.IsNationalCode(s)
    IranValidation.IsMobile(s)
    IranValidation.IsBankCard(s)   /  GetCardBank(s)
    IranValidation.IsIban(s)       /  GetIbanBank(s)

On your models you can use the attributes instead:
    [NationalCode] [IranMobile] [Sheba] [BankCard]
*@
اینپوت شماره های بانکی و هویتی

BzBankInput همه ی کارهای بالا را خودش انجام میده: ماسک، اعتبارسنجی و تشخیص بانک. فقط Type را عوض کنید.

CardNumber
---
محدود به چند بانک
---
Iban
IR-----
AccountNumber
---
NationalCode
-
-
LegalId
-
-
Type توضیح
CardNumberکارت 16 رقمی، الگوریتم luhn + تشخیص بانک
Ibanشبا، mod-97 + تشخیص بانک
AccountNumberشماره حساب با طول دلخواه (Length)
NationalCodeکد ملی؛ با ShowLocation استان و شهر را هم میده
LegalIdشناسه ملی اشخاص حقوقی (11 رقم)
ForeignerIdشناسه فراگیر اتباع خارجی
Passportشماره پاسپورت
Customفرمت دلخواه
razor
@using BzCore.Components.Form
@using BzCore.Enums

@* Card number — masks, Luhn-checks and detects the bank on its own *@
<BzBankInput Type="BzIdentifierType.CardNumber" @bind-Value="_card" Label="شماره کارت" />

@* Only accept cards from certain banks *@
<BzBankInput Type="BzIdentifierType.CardNumber" @bind-Value="_card2"
             AllowedBanks="@(new(){ BzBank.Mellat, BzBank.Melli })"
             Label="فقط کارت ملت یا ملی" />

@* IBAN — mod-97 checked, bank detected *@
<BzBankInput Type="BzIdentifierType.Iban" @bind-Value="_sheba" Label="شماره شبا" />

@* Account number with a fixed length *@
<BzBankInput Type="BzIdentifierType.AccountNumber" @bind-Value="_acct" Length="13"
             Label="شماره حساب (13 رقم)" ShowBank="false" />

@* National code — ShowLocation also resolves the issuing province and city *@
<BzBankInput Type="BzIdentifierType.NationalCode" @bind-Value="_nc"
             ShowLocation="true" ShowBank="false"
             Label="کد ملی (با تشخیص استان و شهر)" />

@* Legal entity national ID *@
<BzBankInput Type="BzIdentifierType.LegalId" @bind-Value="_legal"
             ShowBank="false" Label="شناسه ملی حقوقی" />

@code {
    private string? _card, _card2, _sheba, _acct, _nc, _legal;
}