رفتن به محتوای اصلی

ابزارها

تولید شبا از حساب

از کد بانک و شماره حساب، شبا با رقم کنترل IBAN می‌سازد.

رقم کنترل IBAN از روی کد بانک و حساب محاسبه می‌شود. قالب حساب هر بانک فرق دارد؛ خروجی را با اپ بانک چک کنید.

کد بانک معتبر و شماره حساب لازم است.

مرتبط

در بسیاری از فرآیندهای اداری هنوز «شماره حساب» روی گردش کار یا فاکتور چاپ می‌شود، اما درگاه پایا، ساتنا، یا ERP سازمان فقط فیلد شبا می‌پذیرد. اگر شماره حساب را از صورت‌حساب دارید و کد سه‌رقمی بانک را از سربرگ یا جدول کد بانک‌های ایران در FinAI، می‌توانید رشتهٔ IBAN را با همان قواعدی بسازید که بانک مرکزی برای BBAN ایران تعریف کرده — به شرطی که padding و طول حساب را درست بفهمید. ابزار تولید شبا از کد بانک و حساب دو رقم کنترل IBAN را از روی بدنهٔ حساب محاسبه می‌کند، نه برعکس؛ خروجی را در مرورگر شما می‌سازد و شمارهٔ حساب یا کارت کامل را به سرور FinAI نمی‌فرستد.

چرا «تولید» با «اعتبارسنجی» فرق دارد

اعتبارسنجی شبا فرض می‌کند رشتهٔ بیست‌وشش‌نویسه‌ای (یا بیست‌وچهار رقم بدون IR) از قبل وجود دارد و می‌پرسد آیا mod 97 درست است. تولید شبا مسیر معکوسِ کنترل‌شده است: شما سه رقم کد بانک و رقم‌های حساب را می‌دهید؛ سیستم BBAN را تا طول ثابت می‌بندد و دو رقم کنترل را طوری می‌چیند که باقی‌ماندهٔ ۹۷ برابر یک شود. اگر یک رقم در حساب جابه‌جا شود، دو رقم کنترل هم عوض می‌شوند؛ بنابراین نمی‌توانید فقط «۰۱» جلوی حساب بگذارید و امیدوار باشید در شبکه بپذیرند.

تولید در FinAI فقط وقتی موفق است که کد بانک در جدول داخلی شناخته شود. کد ناشناخته ممکن است موسسهٔ تازه یا خارج از پوشش جدول باشد — نه لزوماً اشتباه شما. در آن حالت حتی با mod 97 دستی هم بهتر است شبا را از اپ بانک copy کنید.

آنatomy رشتهٔ IR از دید سازنده

IBAN نمایشی ایران این‌گونه چیده می‌شود: پیشوند IR، دو رقم کنترل، سپس بیست و دو رقم BBAN که خودش از «سه رقم کد بانک + شماره حساب» تشکیل شده است. شماره حساب در BBAN حداکثر نوزده رقم دارد؛ اگر کوتاه‌تر باشد، از چپ با صفر پر می‌شود تا در مجموع با کد بانک، بیست و دو رقم BBAN ساخته شود. کل digit body بدون IR بیست‌وچهار رقم است: دو رقم کنترل + بیست و دو رقم BBAN.

اشتباه رایج در آموزش داخلی: فرض می‌کنند نوزده رقم «فقط حساب» است و سه رقم بانک جداگانه می‌آید؛ در عمل آن سه رقم بخشی از همان بیست‌ودو رقم BBAN است که بعد از دو رقم کنترل می‌نشیند. ابزار FinAI ورودی «کد بانک» و «حساب» را جدا می‌گیرد تا با زبان صورت‌حساب هم‌خوان باشد، ولی در خروجی یکپارچه IR + check + code + padded account برمی‌گرداند.

الگوریتم رقم کنترل؛ جهت درست محاسبه

برای ساخت شبا، ابتدا BBAN موقت بدون رقم کنترل می‌سازید: سه رقم کد + حساب pad شده تا نوزده رقم. سپس این رشته را در فرمول IBAN قرار می‌دهید: انتهای عددی معادل «BBAN + 182700» ساخته می‌شود — جایگزین استاندارد جابه‌جایی IR و رقم کنترل با مقدار عددی حروف I و R — و باقی‌ماندهٔ تقسیم بر ۹۷ محاسبه می‌گردد. دو رقم کنترل برابر ۹۸ منهای آن باقی‌مانده (با pad دو رقمی) است. پیاده‌سازی FinAI همان منطق validate-sheba را در جهت معکوس اجرا می‌کند تا خروجی و ورودی همیشه هم‌خوان بمانند.

نکتهٔ حرفه‌ای: اگر بعد از تولید، خروجی را در validate-sheba نگذارید و مستقیم واریز کنید، یک typo در کد بانک که جدول اجازه داده ولی با حساب واقعی نمی‌خواند، mod 97 را پاس می‌کند ولی پول به حساب اشتباه یا reject می‌رود. تولید «ریاضی درست» را تضمین می‌کند، نه «حساب زندهٔ گیرنده».

چرا pad از چپ با صفر

بانک‌های مختلف طول نمایش حساب در اپ را متفاوت نشان می‌دهند: بعضی صفرهای پیشرو را حذف می‌کنند، بعضی شمارهٔ کوتاه مشترک را با صفر پر می‌کنند. استاندارد IBAN ایران برای BBAN طول ثابت می‌خواهد؛ pad از چپ یعنی «کوچک‌ترین مقدار عددی همان ارقام» بدون از دست دادن معنا. اگر شما صفرهای ابتدای حساب را در Excel حذف کرده باشید، تولید شبای متفاوت — و غلط نسبت به سوابق بانک — می‌گیرید.

همهٔ بانک‌ها یک قالب حساب ندارند

FinAI یک قانون واحد pad-to-19 اعمال می‌کند چون IBAN ایران یک BBAN length دارد. ولی در core banking، معنای فیلد حساب ممکن است شامل کد شعبه، نوع سپرده، یا زیرحساب باشد — بسته به بانک و نسل سیستم. صورت‌حساب قدیمی گاهی «شماره حساب» کوتاه می‌دهد و شبا را جدا چاپ می‌کند؛ منبع حقیقت برای واریز همان شبای اپ است، نه بازسازی از حساب کوتاه مگر اینکه procedure HR شما تأیید کرده باشد.

  • برخی سازمان‌ها دو فیلد «شماره مشتری» و «شماره حساب» دارند؛ فقط یکی در BBAN می‌رود.
  • حساب‌های ارزی یا قرض‌الحسنه ممکن است در UI شبای جدا با همان کد بانک نشان دهند.
  • پس از ادغام، کد بانک جدول با برند قدیمی روی فاکتور فرق دارد؛ کد را از شبای رسمی بگیرید، نه از حافظهٔ تجاری.

ابزار کارت به شبا عمداً این مسیر را با PAN طی نمی‌کند؛ PAN شناسهٔ کارت است، نه لزوماً literal همان فیلد حساب در BBAN. تولید شبا برای کسانی است که account number دفتری دارند، نه برای حدس از sixteen رقم کارت.

گردش کار پیشنهادی قبل از واریز

  1. کد بانک را با جدول کد یا با تشخیص بانک از شبای نمونه همان مشتری تطبیق دهید.
  2. شماره حساب را دقیقاً مثل سند بانکی (با صفرهای پیشرو) در فرم تولید بگذارید.
  3. خروجی را در اعتبارسنجی شبا بگذارید — باید معتبر شود.
  4. اگر مشتری شبای مستقل از اپ داده، تولید شما باید کاراکتر به کاراکتر با آن یکی باشد؛ اگر نبود، pad یا فیلد اشتباه است.
  5. برای نمایش در PDF، فرمت کارت و شبا فقط فاصله اضافه می‌کند؛ اعتبار را عوض نمی‌کند.

حریم خصوصی و محاسبه در مرورگر

شماره حساب و کد بانک، اگرچه کمتر از CVV حساس‌اند، باز هم شناسهٔ مالی هستند. در FinAI تولید شبا در client-side انجام می‌شود: برای ساخت IBAN لازم نیست داده را به API ارسال کنید. در چت‌های گروهی یا تیکت عمومی، کل شبا یا حساب کامل را paste نکنید؛ اگر آموزش می‌دهید، از اعداد ساختگی استفاده کنید.

این طراحی برای تیم‌های compliance هم ساده است: دادهٔ PAN کارت در این ابزار اصلاً ورودی نیست؛ اگر کاربر کارت دارد، مسیر اعتبارسنجی کارت و تشخیص بانک از BIN جداست و باز هم بدون ارسال شماره کارت به سرور. همان منطق برای حسابداری دورکاری اهمیت دارد: لپ‌تاپ شخصی نباید به خاطر «یک فرم شبا» دادهٔ پرسنل را به cloud ناشناس بفرستد.

سناریو: حقوق و دستمزد با فایل قدیمی

شرکتی که سال‌ها «شماره حساب» در Excel دارد و تازه بانک خواسته شبا، ممکن است بخواهد ستون جدید را با فرمول پر کند. اگر pad یا کد بانک یکسان برای همهٔ ردیف‌ها اشتباه باشد، mod 97 برای هر ردیف «معتبر» ساخته می‌شود ولی واریز دسته‌ای reject یا misroute می‌شود. پیشنهاد عملی: برای چند کارمند نمونه، شبای اپ را با خروجی تولید مقایسه کنید؛ بعد macro یا import را گسترش دهید. FinAI UI برای تست تک‌ردیفی بدون نصب مناسب است.

سناریو: فاکتور B2B

فروشنده روی فاکتور کد بانک ۰۱۸ و حساب کوتاه چاپ کرده؛ خریدار در اپ بانک خود شبا می‌خواهد. خریدار می‌تواند با همان دو فیلد شبا بسازد، ولی قبل از مبلغ بالا باید با فروشنده تلفنی شبای اپ را تطبیق دهد. تولید موفق FinAI یعنی checksum درست است، نه اینکه فروشنده حساب را عوض نکرده.

تفاوت با استعلام نام صاحب حساب

شبای ساخته‌شده هیچ نام یا وضعیت فعالی نشان نمی‌دهد. بانک فقط در کانال‌های قراردادی نام گیرنده را برمی‌گرداند. اگر mod 97 درست باشد ولی نام در درگاه mismatch دهد، واریز را متوقف کنید — مشکل از شبای غلط یا حساب قدیمی است، نه از ابزار تولید.

خطاهای ورودی که قبل از mod 97 قطع می‌شوند

کد بانک غیرسه‌رقمی پس از نرمال، حساب خالی، یا حساب بیش از نوزده رقم: FinAI خروجی null می‌دهد به‌جای حدس زدن. ارقام فارسی به لاتین تبدیل می‌شوند. این رفتار عمدی است تا «شبای نیمه‌کاره» در CSV سازمان جا نیفتد.

هم‌ترازی با جدول BIN

کد ۰۱۲ در شبا به ملت اشاره می‌کند؛ BIN کارت ۶۱۰۴۳۳ در lookup همان خانواده را نشان می‌دهد. اگر کد بانک در تولید با BIN کارت همان شخص فرق کرد، قبل از واریز توقف کنید — شاید فاکتور حساب قدیمی یا کارت co-brand است. مرجع transfer شبا است، نه PAN.

برای توسعه‌دهندگان داخلی

اگر می‌خواهید همان logic را در ERP تکرار کنید، از validate و generate یک منبع truth در repo FinAI الهام بگیرید: یک تابع mod 97 روی BBAN، یک pad ثابت. تست واحد: generate سپس validate باید true بدهد. edge case: حساب تمام‌صفر معمولاً در واقعیت نیست ولی اگر در تست بود، رفتار pad را مستند کنید.

چرا reverse-engineer شبا به حساب توصیه نمی‌شود

از شبای کامل می‌توان BBAN را خواند، ولی «حذف صفرهای پیشرو» برای نمایش حساب در Excel گاهی حساب کوتاه‌تر از واقع می‌دهد. جهت رسمی برای واریز، forward generation از منبع مورد اعتماد است. validate فقط صحت ریاضی را چک می‌کند.

جمع‌بندی نقش این ابزار

تولید شبا در FinAI پل بین زبان صورت‌حساب (کد بانک + حساب) و زبان شبکهٔ بین‌بانکی (IBAN IR) است. رقم کنترل را درست از بدنه می‌سازد، در مرورگر شما کار می‌کند، و با validate، bank-from-sheba، format، و جدول کد بانک در یک اکوسystem خوانده می‌شود. آخرین خط دفاع همیشه تطبیق با اپ بانک گیرنده و فرآیند KYC سازمان شماست — نه فقط mod 97.

واژه‌نامهٔ کوتاه برای تیم مالی

BBAN: بدنهٔ داخلی بدون IR. mod 97: checksum IBAN. pad: صفر از چپ تا طول نوزده برای بخش حساب در BBAN. کد بانک: سه رقم بعد از رقم کنترل در body بیست‌وچهار رقمی. با این واژگان، گفت‌وگو با IT هنگام مهاجرت ERP روان‌تر می‌شود.

وقتی خروجی validate با تولید فرق دارد

تقریباً همیشه یعنی ورودی دو بار متفاوت بوده: یک بار با صفر حذف‌شده، یک بار با IR جدا، یا کد بانک از منبع اشتباه. دوباره از سند اصلی تایپ کنید؛ copy از PDF گاهی ۰ و O را قاطی می‌کند. format کردن قبل از validate مشکلی ایجاد نمی‌کند چون فاصله strip می‌شود.

در نهایت، ساخت شبا مهارت «بستن رشته» است؛ اعتماد به پول‌ movement با فرآیند انسانی و درگاه رسمی تکمیل می‌شود. FinAI این بستن را سریع و خصوصی می‌کند — استفادهٔ درست آن یعنی generate، validate، مقایسه با منبع زنده، سپس transfer.

تمامی حقوق این وبسایت برای FinAI محفوظ است.