راهنمای کامل شماره شبا — ساختار، اعتبارسنجی و استعلام
شبا از چه اجزایی ساخته شده، چطور بدون تماس با بانک اعتبارش را بسنجیم، استعلام شبا دقیقاً چه چیزی میگوید و چه چیزی نمیگوید، و پنج خطایی که بیشترین حوالهها را برمیگرداند.
شبا (شمارهٔ حساب بانکی ایران) نسخهٔ ایرانی استاندارد جهانی IBAN است. هدفش ساده است: یک شناسهٔ یکتا برای هر حساب بانکی در کل کشور، بهجای شمارهحسابهایی که هر بانک به سلیقهٔ خودش میداد و بین بانکها معنایی نداشتند.
برای صرافی، شبا فقط یک فیلد فرم نیست. اشتباه در آن یعنی حواله برمیگردد (خوشبینانه) یا به حساب اشتباهی میرود (بدبینانه). این راهنما همان چیزی است که تیم شما باید بداند.
ساختار شبا
شبای ایران ۲۶ کاراکتر است: دو حرف IR و بعد ۲۴ رقم. نه یکی بیشتر، نه یکی کمتر.
- کد کشور: همیشه
IR. - ارقام کنترلی: دو رقمی که ریاضیوار از بقیهٔ شماره ساخته میشوند. کارشان فقط یک چیز است: گرفتن غلط تایپی. اگر یک رقم را اشتباه بزنید، این دو رقم دیگر نمیخوانند.
- کد بانک: سه رقم که بانک را مشخص میکند.
- شناسهٔ حساب: ۱۹ رقم که خودِ بانک تخصیص میدهد. اگر شمارهحساب کوتاهتر باشد، با صفر از سمت چپ پر میشود — و این صفرها بخشی از شبا هستند، نه تزئین.
نکتهٔ کاربردی: کد بانک به شما میگوید حواله داخلی است (همان بانک، آنی و بیکارمزد) یا بینبانکی (پایا/ساتنا، با زمان و کارمزد متفاوت). همین یک تشخیص، تفاوت بین «الان رسید» و «فردا رسید» را میسازد.
نمونهای از کدهای بانکی پرکاربرد
| کد | بانک |
|---|---|
| 012 | ملت |
| 015 | سپه |
| 016 | کشاورزی |
| 017 | ملی ایران |
| 018 | تجارت |
| 019 | صادرات ایران |
| 021 | پست بانک |
| 054 | پارسیان |
| 055 | اقتصاد نوین |
| 056 | سامان |
| 057 | پاسارگاد |
این فهرست کامل نیست و تغییر هم میکند — ادغام بانکها کدهایی را از رده خارج میکند. فهرست مرجع را از بانک مرکزی بگیرید و اگر در نرمافزارتان هاردکد شده، سالی یکبار بهروزش کنید.
اعتبارسنجی: قبل از هر تماسی، خودتان بسنجید
ارقام کنترلی شبا با الگوریتم استاندارد MOD-97-10 (از ISO 7064) ساخته میشوند. زیبایی ماجرا این است که برای بررسیاش به هیچ سرویس و اینترنتی نیاز ندارید — روی کاغذ هم میشود انجامش داد:
- چهار کاراکتر اول (
IR+ دو رقم کنترلی) را بردارید و به انتهای شماره ببرید. - حروف را به عدد تبدیل کنید:
A=10,B=11, …I=18, …R=27, …Z=35. پسIRمیشود1827. - حالا یک عدد بسیار بزرگ دارید. باقیماندهٔ تقسیمش بر ۹۷ را حساب کنید.
- اگر باقیمانده دقیقاً ۱ بود، شبا از نظر ساختاری معتبر است. هر عدد دیگری یعنی غلط.
چون عدد از ظرفیت اعداد صحیح معمولی بزرگتر است، در عمل رقمبهرقم پیش میروند:
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;
}
این ده خط کد، بیشتر غلطهای تایپی را قبل از اینکه هزینهای بدهید میگیرد. اگر از سرویس استعلام پولی استفاده میکنید، این بررسی را همیشه اول انجام دهید؛ فرستادن شبای بدشکل به سرویس، پول دادن برای شنیدن «غلط است» میشود.
اما دقت کنید: معتبر بودن یعنی «این شماره میتواند یک شبا باشد» — نه اینکه «این حساب وجود دارد». میشود شبای کاملاً معتبری ساخت که به هیچ حسابی وصل نیست. برای دانستن وجود و صاحب حساب، راهی جز استعلام نیست.
استعلام شبا چه چیزی میگوید؟
استعلام معمولاً سه چیز برمیگرداند:
- نام صاحب حساب — مهمترین بخش.
- نام بانک — تأییدی بر کد بانک.
- قابلیت دریافت — بعضی حسابها (مسدود، راکد، یا نوعهای خاص) واریز نمیپذیرند. دانستن این قبل از ارسال، یعنی یک برگشتی کمتر.
برای صرافی، نام صاحب حساب فقط راحتی نیست؛ یک کنترل واقعی است:
- تطبیق نام با مشتری. اگر مشتری «رضا احمدی» است و شبا به نام کس دیگری است، یک سؤال لازم دارید. گاهی جواب ساده و درست است (حساب همسر، حساب شرکت). گاهی هم نه.
- غلطهای خاموش. شبایی که ساختارش درست است ولی متعلق به آدم دیگری است، هیچ خطایی نمیدهد. پول میرود، و برگرداندنش دیگر یک مسئلهٔ فنی نیست — یک مسئلهٔ حقوقی است.
- ردپای انطباق. ثبت اینکه «در لحظهٔ ثبت این حواله، شبا به نام فلانی بود» بخشی از پروندهٔ KYC شماست. سه ماه بعد که کسی میپرسد چرا این حواله انجام شد، جواب دارید.
پنج خطایی که بیشترین حواله را برمیگرداند
- صفرهای ابتدایی گمشده. آن ۱۹ رقم اگر با صفر شروع شود و شبا در اکسل تایپ شده باشد، اکسل صفرها را «تمیز» میکند و شبا خراب میشود. شبا را همیشه بهصورت متن نگه دارید، نه عدد. (اینجا هم اکسل بیصدا خرابکاری میکند.)
- ارقام فارسی و عربی. مشتری از گوشی کپی میکند و
۱۲۳میآید نه123. برای چشم یکی است؛ برای سیستم بانکی دو چیز کاملاً متفاوت. ورودیها را همیشه به رقم لاتین نرمال کنید. IRجا افتاده یا اضافه. بعضی سیستمهاIRرا خودشان میگذارند و مشتری هم گذاشته:IRIR…. ورودی را نرمال کنید، ردش نکنید.- فاصله، خط تیره و کاراکتر نامرئی. کپی از واتساپ اغلب کاراکترهای جهتنما (RTL/LTR) هم میآورد که دیده نمیشوند ولی رشته را میشکنند. همهچیز غیر از
0-9وIRرا حذف کنید. Iبهجای1وOبهجای0. وقتی شبا از روی کاغذ یا عکس خوانده میشود. اعتبارسنجی MOD-97 این را میگیرد — بهشرطی که اجرایش کنید.
قاعدهٔ کلی: ورودی را نرمال کنید، بعد اعتبارسنجی کنید، بعد استعلام بگیرید. به این ترتیب. اکثر «خطاهای شبا» در واقع خطای نرمالسازیاند، نه خطای مشتری.
شماره حساب را میشود به شبا تبدیل کرد؟
نیمه. هر بانک قاعدهٔ خودش را برای ساختن ۱۹ رقم از شمارهحساب دارد، و این قاعدهها رسمی و پایدار نیستند. تبدیلکنندههای آنلاین معمولاً بر پایهٔ مهندسی معکوس کار میکنند و برای بعضی انواع حساب اشتباه میدهند.
توصیهٔ عملی: شبا را از خود مشتری بگیرید (در اپ بانک و کارتبهکارت در دسترس است) و بعد استعلام بگیرید. ساختن شبا با فرمول و فرستادن پول بر اساس آن، ریسکی است که ارزشش را ندارد.
این کار جای دستی ندارد
استعلام شبا کاری است که باید بیصدا و در جای درست انجام شود، نه اینکه اپراتور تب دیگری باز کند و کپیپیست کند.
در نکستو، وقتی در فرم حوالهٔ بانکی از فیلد شبا بیرون میآیید، همان لحظه اعتبارسنجی محلی انجام میشود و اگر معتبر بود، استعلام میرود و نام صاحب حساب و بانک خودکار پر میشوند — با هینت سبز یا قرمز. اپراتور کاری نمیکند جز نگاه کردن. و چون نتیجه کش میشود، استعلام دوبارهٔ همان شبا توسط همان صرافی هزینهای ندارد.
نتیجهٔ عملی: کنترلی که خودکار انجام شود، همیشه انجام میشود. کنترلی که دستی باشد، دقیقاً در شلوغترین روز — روزی که بیشترین اهمیت را دارد — رد میشود.
خلاصه
شبا سه لایه دارد و هر سه لازماند: نرمالسازی (کاراکترهای اضافه و ارقام غیرلاتین)، اعتبارسنجی (MOD-97، رایگان و آفلاین)، و استعلام (وجود و صاحب حساب، تنها راه دانستن اینکه پول کجا میرود).
دو تای اول را میتوانید همین امروز و بدون هیچ هزینهای به سیستمتان اضافه کنید. سومی هزینهٔ ناچیزی دارد و در ازایش برگشتیها، اشتباههای گران و سؤالهای بیجواب انطباق را کم میکند.
همینها را در نکستو ببینید
یک نسخهٔ کامل و اختصاصی با دیتای نمونه — بدون نصب، بدون کارت بانکی.
ساخت دموی رایگان