Nexto
خانهبلاگحواله و بانک
حواله و بانک

راهنمای کامل شماره شبا — ساختار، اعتبارسنجی و استعلام

شبا از چه اجزایی ساخته شده، چطور بدون تماس با بانک اعتبارش را بسنجیم، استعلام شبا دقیقاً چه چیزی می‌گوید و چه چیزی نمی‌گوید، و پنج خطایی که بیشترین حواله‌ها را برمی‌گرداند.

۷ دقیقه مطالعه · تیم نکستو · آخرین به‌روزرسانی: ۲۵ تیر ۱۴۰۵

شبا (شمارهٔ حساب بانکی ایران) نسخهٔ ایرانی استاندارد جهانی IBAN است. هدفش ساده است: یک شناسهٔ یکتا برای هر حساب بانکی در کل کشور، به‌جای شماره‌حساب‌هایی که هر بانک به سلیقهٔ خودش می‌داد و بین بانک‌ها معنایی نداشتند.

برای صرافی، شبا فقط یک فیلد فرم نیست. اشتباه در آن یعنی حواله برمی‌گردد (خوش‌بینانه) یا به حساب اشتباهی می‌رود (بدبینانه). این راهنما همان چیزی است که تیم شما باید بداند.

ساختار شبا

شبای ایران ۲۶ کاراکتر است: دو حرف IR و بعد ۲۴ رقم. نه یکی بیشتر، نه یکی کمتر.

IR 21 017 0000000012345678901 کد کشور ثابت ارقام کنترلی ۲ رقم کد بانک ۳ رقم شناسهٔ حساب ۱۹ رقم — با صفر از چپ پر می‌شود ۲۶ کاراکتر: IR + ۲۴ رقم ارقام کنترلی با MOD-97 ساخته می‌شوند — بدون اینترنت هم قابل بررسی‌اند
ساختار شبا: چهار بخش با طول ثابت. کد بانک تعیین می‌کند حواله داخلی است یا بین‌بانکی.
  • کد کشور: همیشه IR.
  • ارقام کنترلی: دو رقمی که ریاضی‌وار از بقیهٔ شماره ساخته می‌شوند. کارشان فقط یک چیز است: گرفتن غلط تایپی. اگر یک رقم را اشتباه بزنید، این دو رقم دیگر نمی‌خوانند.
  • کد بانک: سه رقم که بانک را مشخص می‌کند.
  • شناسهٔ حساب: ۱۹ رقم که خودِ بانک تخصیص می‌دهد. اگر شماره‌حساب کوتاه‌تر باشد، با صفر از سمت چپ پر می‌شود — و این صفرها بخشی از شبا هستند، نه تزئین.

نکتهٔ کاربردی: کد بانک به شما می‌گوید حواله داخلی است (همان بانک، آنی و بی‌کارمزد) یا بین‌بانکی (پایا/ساتنا، با زمان و کارمزد متفاوت). همین یک تشخیص، تفاوت بین «الان رسید» و «فردا رسید» را می‌سازد.

نمونه‌ای از کدهای بانکی پرکاربرد

کد بانک
012 ملت
015 سپه
016 کشاورزی
017 ملی ایران
018 تجارت
019 صادرات ایران
021 پست بانک
054 پارسیان
055 اقتصاد نوین
056 سامان
057 پاسارگاد

این فهرست کامل نیست و تغییر هم می‌کند — ادغام بانک‌ها کدهایی را از رده خارج می‌کند. فهرست مرجع را از بانک مرکزی بگیرید و اگر در نرم‌افزارتان هاردکد شده، سالی یک‌بار به‌روزش کنید.

اعتبارسنجی: قبل از هر تماسی، خودتان بسنجید

ارقام کنترلی شبا با الگوریتم استاندارد MOD-97-10 (از ISO 7064) ساخته می‌شوند. زیبایی ماجرا این است که برای بررسی‌اش به هیچ سرویس و اینترنتی نیاز ندارید — روی کاغذ هم می‌شود انجامش داد:

  1. چهار کاراکتر اول (IR + دو رقم کنترلی) را بردارید و به انتهای شماره ببرید.
  2. حروف را به عدد تبدیل کنید: A=10, B=11, … I=18, … R=27, … Z=35. پس IR می‌شود 1827.
  3. حالا یک عدد بسیار بزرگ دارید. باقی‌ماندهٔ تقسیمش بر ۹۷ را حساب کنید.
  4. اگر باقی‌مانده دقیقاً ۱ بود، شبا از نظر ساختاری معتبر است. هر عدد دیگری یعنی غلط.

چون عدد از ظرفیت اعداد صحیح معمولی بزرگ‌تر است، در عمل رقم‌به‌رقم پیش می‌روند:

function shebaValid(string $sheba): bool
{
    $s = strtoupper(preg_replace('/[\s-]/', '', $sheba));
    if (! preg_match('/^IR[0-9]{24}$/', $s)) {
        return false;                       // طول یا شکل غلط
    }

    $re  = substr($s, 4).substr($s, 0, 4);  // چهار کاراکتر اول به آخر
    $num = '';
    foreach (str_split($re) as $ch) {
        $num .= ctype_alpha($ch) ? (string) (ord($ch) - 55) : $ch;
    }

    $rem = 0;                               // mod 97 رقم‌به‌رقم
    foreach (str_split($num) as $d) {
        $rem = ($rem * 10 + (int) $d) % 97;
    }

    return $rem === 1;
}

این ده خط کد، بیشتر غلط‌های تایپی را قبل از اینکه هزینه‌ای بدهید می‌گیرد. اگر از سرویس استعلام پولی استفاده می‌کنید، این بررسی را همیشه اول انجام دهید؛ فرستادن شبای بدشکل به سرویس، پول دادن برای شنیدن «غلط است» می‌شود.

اما دقت کنید: معتبر بودن یعنی «این شماره می‌تواند یک شبا باشد» — نه اینکه «این حساب وجود دارد». می‌شود شبای کاملاً معتبری ساخت که به هیچ حسابی وصل نیست. برای دانستن وجود و صاحب حساب، راهی جز استعلام نیست.

استعلام شبا چه چیزی می‌گوید؟

استعلام معمولاً سه چیز برمی‌گرداند:

  • نام صاحب حساب — مهم‌ترین بخش.
  • نام بانک — تأییدی بر کد بانک.
  • قابلیت دریافت — بعضی حساب‌ها (مسدود، راکد، یا نوع‌های خاص) واریز نمی‌پذیرند. دانستن این قبل از ارسال، یعنی یک برگشتی کمتر.

برای صرافی، نام صاحب حساب فقط راحتی نیست؛ یک کنترل واقعی است:

  1. تطبیق نام با مشتری. اگر مشتری «رضا احمدی» است و شبا به نام کس دیگری است، یک سؤال لازم دارید. گاهی جواب ساده و درست است (حساب همسر، حساب شرکت). گاهی هم نه.
  2. غلط‌های خاموش. شبایی که ساختارش درست است ولی متعلق به آدم دیگری است، هیچ خطایی نمی‌دهد. پول می‌رود، و برگرداندنش دیگر یک مسئلهٔ فنی نیست — یک مسئلهٔ حقوقی است.
  3. ردپای انطباق. ثبت اینکه «در لحظهٔ ثبت این حواله، شبا به نام فلانی بود» بخشی از پروندهٔ KYC شماست. سه ماه بعد که کسی می‌پرسد چرا این حواله انجام شد، جواب دارید.

پنج خطایی که بیشترین حواله را برمی‌گرداند

  • صفرهای ابتدایی گم‌شده. آن ۱۹ رقم اگر با صفر شروع شود و شبا در اکسل تایپ شده باشد، اکسل صفرها را «تمیز» می‌کند و شبا خراب می‌شود. شبا را همیشه به‌صورت متن نگه دارید، نه عدد. (اینجا هم اکسل بی‌صدا خرابکاری می‌کند.)
  • ارقام فارسی و عربی. مشتری از گوشی کپی می‌کند و ۱۲۳ می‌آید نه 123. برای چشم یکی است؛ برای سیستم بانکی دو چیز کاملاً متفاوت. ورودی‌ها را همیشه به رقم لاتین نرمال کنید.
  • IR جا افتاده یا اضافه. بعضی سیستم‌ها IR را خودشان می‌گذارند و مشتری هم گذاشته: IRIR…. ورودی را نرمال کنید، ردش نکنید.
  • فاصله، خط تیره و کاراکتر نامرئی. کپی از واتساپ اغلب کاراکترهای جهت‌نما (RTL/LTR) هم می‌آورد که دیده نمی‌شوند ولی رشته را می‌شکنند. همه‌چیز غیر از 0-9 و IR را حذف کنید.
  • I به‌جای 1 و O به‌جای 0. وقتی شبا از روی کاغذ یا عکس خوانده می‌شود. اعتبارسنجی MOD-97 این را می‌گیرد — به‌شرطی که اجرایش کنید.

قاعدهٔ کلی: ورودی را نرمال کنید، بعد اعتبارسنجی کنید، بعد استعلام بگیرید. به این ترتیب. اکثر «خطاهای شبا» در واقع خطای نرمال‌سازی‌اند، نه خطای مشتری.

شماره حساب را می‌شود به شبا تبدیل کرد؟

نیمه. هر بانک قاعدهٔ خودش را برای ساختن ۱۹ رقم از شماره‌حساب دارد، و این قاعده‌ها رسمی و پایدار نیستند. تبدیل‌کننده‌های آنلاین معمولاً بر پایهٔ مهندسی معکوس کار می‌کنند و برای بعضی انواع حساب اشتباه می‌دهند.

توصیهٔ عملی: شبا را از خود مشتری بگیرید (در اپ بانک و کارت‌به‌کارت در دسترس است) و بعد استعلام بگیرید. ساختن شبا با فرمول و فرستادن پول بر اساس آن، ریسکی است که ارزشش را ندارد.

این کار جای دستی ندارد

استعلام شبا کاری است که باید بی‌صدا و در جای درست انجام شود، نه اینکه اپراتور تب دیگری باز کند و کپی‌پیست کند.

در نکستو، وقتی در فرم حوالهٔ بانکی از فیلد شبا بیرون می‌آیید، همان لحظه اعتبارسنجی محلی انجام می‌شود و اگر معتبر بود، استعلام می‌رود و نام صاحب حساب و بانک خودکار پر می‌شوند — با هینت سبز یا قرمز. اپراتور کاری نمی‌کند جز نگاه کردن. و چون نتیجه کش می‌شود، استعلام دوبارهٔ همان شبا توسط همان صرافی هزینه‌ای ندارد.

نتیجهٔ عملی: کنترلی که خودکار انجام شود، همیشه انجام می‌شود. کنترلی که دستی باشد، دقیقاً در شلوغ‌ترین روز — روزی که بیشترین اهمیت را دارد — رد می‌شود.

خلاصه

شبا سه لایه دارد و هر سه لازم‌اند: نرمال‌سازی (کاراکترهای اضافه و ارقام غیرلاتین)، اعتبارسنجی (MOD-97، رایگان و آفلاین)، و استعلام (وجود و صاحب حساب، تنها راه دانستن اینکه پول کجا می‌رود).

دو تای اول را می‌توانید همین امروز و بدون هیچ هزینه‌ای به سیستم‌تان اضافه کنید. سومی هزینهٔ ناچیزی دارد و در ازایش برگشتی‌ها، اشتباه‌های گران و سؤال‌های بی‌جواب انطباق را کم می‌کند.

همین‌ها را در نکستو ببینید

یک نسخهٔ کامل و اختصاصی با دیتای نمونه — بدون نصب، بدون کارت بانکی.

ساخت دموی رایگان
مشاوره در واتساپ