ابزار تولید و اعتبارسنجی شماره شبا (IBAN) - دادههای بانکی آزمایشی
تولید شماره شبای معتبر آزمایشی یا اعتبارسنجی فوری شمارههای موجود. پشتیبانی از 10 کشور اروپایی با اعتبارسنجی MOD 97. مناسب برای آزمایش و توسعه نرمافزارهای مالی.
تولیدکننده و اعتبارسنج شماره شبا (IBAN)
مستندات
ابزار تولید و اعتبارسنجی شماره شبا (IBAN)
کاربرد این ابزار
برای آزمایش نرمافزارهای مالی بدون استفاده از دادههای حساب بانکی واقعی؟ شما به فرمتهای IBAN معتبر که از چکهای اعتبارسنجی عبور میکنند نیاز دارید. این ابزار IBANهای تصادفی تولید میکند که از فرمتهای کشور خاص پیروی میکنند و IBANهای موجود را با استفاده از استاندارد ISO 13616 اعتبارسنجی میکند.
در اینجا مشکل عملی که حل میکند: هنگام ساخت سیستمهای پرداخت یا برنامههای بانکداری، شما به دادههای آزمایشی نیاز دارید که از اعتبارسنجی عبور کنند اما خطر افشای شماره حسابهای واقعی را نداشته باشند. اشتباه رایجی که توسعهدهندگان مرتکب میشوند، ایجاد IBANهای "جعلی" است که از الگوریتم چک MOD 97 عبور نمیکنند و باعث شکست آزمایشها به دلایل نادرست میشوند.
ابزار دو وظیفه اصلی را انجام میدهد:
- تولیدکننده: IBANهای دارای ساختار معتبر را برای هر کشور پشتیبانی شده ایجاد میکند. هر شماره تولید شده از همان چکهای اعتبارسنجی که سیستم تولید شما اجرا میکند، عبور میکند.
- اعتبارسنج: ساختار IBAN، ارقام چک و فرمتبندی خاص کشور را تأیید میکند. برای اشکالزدایی علت رد شدن یک IBAN مفید است.
IBANها (شماره حساب بانکی بینالمللی) نحوه شناسایی حسابها توسط بانکها در فرامرزها را استاندارد میکنند. هر کدام شامل کد کشور، دو رقم چک محاسبه شده از طریق MOD 97 و یک شماره حساب بانکی پایه (BBAN) است که بسته به کشور متفاوت است. آنچه این کار را پیچیده میکند این است که آلمان از 22 کاراکتر استفاده میکند در حالی که فرانسه به 27 کاراکتر نیاز دارد و ساختار داخلی کاملاً متفاوت است.
چگونه شمارههای شبا (IBAN) کار میکنند
ساختار و فرمت شبا
شمارههای شبا میتوانند تا ۳۴ کاراکتر الفانومریک باشند، اگرچه اکثر کشورهای اروپایی از ۲۲ تا ۲۷ کاراکتر استفاده میکنند. هر شبا از سه بخش تشکیل میشود:
۱. کد کشور: دو حرف از استاندارد ISO 3166-1 alpha-2 (DE برای آلمان، GB برای انگلستان) ۲. ارقام کنترلی: دو رقم محاسبه شده که کل شبا را با استفاده از MOD 97 اعتبارسنجی میکنند ۳. شماره حساب بانکی پایه (BBAN): بخش مخصوص کشور که شامل:
- شناسه بانک (گاهی به آن شماره مسیریابی یا کد بانک گفته میشود)
- شناسه شعبه (در انگلستان به آن کد مرتبسازی میگویند)
- شماره حساب
- گاهی اوقات ارقام کنترلی ملی اضافی
برای مثال، یک شبای آلمانی. الگوی DE2!n8!n10!n به معنای:
DE= کد کشور2!n= دو رقم کنترلی عددی8!n= کد بانک هشت رقمی (Bankleitzahl)10!n= شماره حساب ده رقمی (Kontonummer)
چیزی که افراد را غافلگیر میکند، تنوع این فرمتها بین کشورهاست:
| کشور | طول | ساختار | مثال |
|---|---|---|---|
| آلمان (DE) | ۲۲ | DE2!n8!n10!n | DE89370400440532013000 |
| انگلستان (GB) | ۲۲ | GB2!n4!a6!n8!n | GB29NWBK60161331926819 |
| فرانسه (FR) | ۲۷ | FR2!n5!n5!n11!c2!n | FR1420041010050500013M02606 |
| اسپانیا (ES) | ۲۴ | ES2!n4!n4!n1!n1!n10!n | ES9121000418450200051332 |
| ایتالیا (IT) | ۲۷ | IT2!n1!a5!n5!n12!c | IT60X0542811101000000123456 |
الگوریتم اعتبارسنجی شبا
اعتبارسنجی شبا بر اساس الگوریتم MOD 97 تعریف شده در ISO 7064 است. در اینجا دقیقاً چه اتفاقی در هنگام اعتبارسنجی یک شبا میافتد:
۱. چهار کاراکتر اول (کد کشور و ارقام کنترلی) را به انتها منتقل کنید ۲. هر حرف را با اعداد جایگزین کنید: A=10، B=11، تا Z=35 ۳. مدولو ۹۷ از رشته عددی حاصل را محاسبه کنید ۴. شبای معتبر همیشه باقیمانده دقیقاً ۱ را تولید میکند
از نظر ریاضی:
چرا دقیقاً MOD 97؟ زیرا تقریباً تمام خطاهای رایج را شناسایی میکند: اشتباهات تک رقمی، ارقام جابجا شده، حتی اکثر خطاهای ورود اطلاعات که شامل کاراکترهای مشابه میشوند. در عمل، دریافتهام که حدود ۹۹.۹٪ از خطاهای تصادفی ورود اطلاعات را شناسایی میکند، به همین دلیل به استاندارد بینالمللی تبدیل شد.
یک نکته جالب که باید بدانید: هنگام تولید شبا، ارقام کنترلی را با شروع از "۰۰" محاسبه میکنید، الگوریتم را اجرا میکنید، سپس از ۹۸ منهای باقیمانده استفاده میکنید. این اطمینان میدهد که شبای نهایی به درستی اعتبارسنجی خواهد شد.
ویژگیهای ابزار
تولیدکننده شماره شبا (IBAN)
تولید شمارههای شبای آزمایشی که بدون استفاده از شماره حسابهای واقعی از اعتبارسنجی عبور میکنند:
- انتخاب کشور: پشتیبانی از ۱۰ کشور اروپایی اصلی (آلمان، انگلستان، فرانسه، اسپانیا، ایتالیا، هلند، سوئیس، اتریش، بلژیک، لهستان)
- انطباق با فرمت: هر شبای تولید شده با ساختار رسمی کشور مطابقت دارد و از اعتبارسنجی MOD 97 عبور میکند
- تولید با یک کلیک: بدون نیاز به پیکربندی - فقط کافی است کشوری را انتخاب و تولید کنید
- کپی به کلیپبورد: با یک کلیک، شبای کامل برای چسباندن در تستهایتان کپی میشود
- نمایش تفصیلی: نمایش رنگیشده که کد کشور، ارقام کنترلی و جزئیات بانک را جداگانه نشان میدهد
فرآیند تولید: ۱. انتخاب قالب فرمت مخصوص کشور ۲. پر کردن ارقام/حروف تصادفی در بخش BBAN ۳. محاسبه ارقام کنترلی با استفاده از MOD 97 ۴. مونتاژ و اعتبارسنجی شبای کامل
نکته حرفهای: هنگام بذرپاشی پایگاه دادههای آزمایشی، شمارههای شبا را از کشورهای مختلف تولید کنید تا سناریوهای فرامرزی را آزمایش کنید. سیستمهای پرداخت واقعی اغلب موارد حاشیهای با کشورهای خاص دارند.
اعتبارسنج شبا
بررسی ساختار شبا و شناسایی مشکلات فرمتبندی قبل از رسیدن به محیط تولید:
- تأیید فرمت: بررسی الزامات طول و ساختار مخصوص کشور
- اعتبارسنجی MOD 97: اجرای کامل الگوریتم رقم کنترلی
- تفکیک مؤلفهها: نمایش دقیق تقسیم شبا به کد کشور، ارقام کنترلی، کد بانک و شماره حساب
- پیغامهای خطای اختصاصی: به جای پیامهای کلی "نامعتبر"، دقیقاً مشخص میشود چه چیزی اشکال دارد
- فرمتبندی خودکار: کار با شمارههای شبا با یا بدون فاصله - فرمتبندی به طور خودکار انجام میشود
بررسیهای اعتبارسنجی به ترتیب اجرا میشوند: ۱. شناسایی کد کشور (آیا پشتیبانی میشود؟) ۲. تأیید طول (تعداد صحیح کاراکتر برای آن کشور؟) ۳. اعتبارسنجی نوع کاراکتر (اعداد در جای مورد انتظار، حروف در جاهای مجاز) ۴. محاسبه رقم کنترلی MOD 97 (آیا محاسبات درست است؟)
سناریوی رایج: API شما شبایی را از ورودی کاربر دریافت میکند که فاصلهگذاری آن ناسازگار است. از اعتبارسنج استفاده کنید تا قبل از پردازش آن را یکسان کنید - فاصلهها را به طور خودکار حذف میکند و فرمت صحیح را نشان میدهد.
راهنمای گام به گام
تولید شماره شبا (IBAN)
۱. دسترسی به زبانه تولیدکننده: روی زبانه "تولیدکننده" کلیک کنید (به طور پیشفرض انتخاب شده است) ۲. انتخاب کشور: کشور مورد نظر خود را از منوی کشویی انتخاب کنید ۳. تولید شماره شبا: روی دکمه "تولید شماره شبا" کلیک کنید ۴. مشاهده نتیجه: شماره شبای تولید شده در زیر با شکستبندی بصری اجزای آن نمایش داده میشود ۵. کپی در کلیپبورد: روی دکمه "کپی در کلیپبورد" کلیک کنید تا شماره شبا را برای استفاده در جای دیگر کپی کنید
اعتبارسنجی شماره شبا
۱. دسترسی به زبانه اعتبارسنجی: روی زبانه "اعتبارسنج" کلیک کنید ۲. وارد کردن شماره شبا: شماره شبا را در فیلد ورودی تایپ یا جایگذاری کنید
- فاصلهها و قالببندی به طور خودکار مدیریت خواهند شد
- ابزار شمارههای شبای قالببندی شده (با فاصله) و بدون قالببندی را میپذیرد ۳. مشاهده نتایج اعتبارسنجی: ابزار به طور خودکار شماره شبا را هنگام تایپ اعتبارسنجی میکند ۴. بررسی جزئیات: برای شمارههای شبای معتبر، شکستبندی اجزا نمایش داده خواهد شد ۵. بررسی خطاها: برای شمارههای شبای نامعتبر، پیامهای خطای خاص به شناسایی مشکل کمک خواهند کرد
کاربردها و کاربردهای دنیای واقعی
توسعه نرمافزار و تست
تست API: هنگام ساخت تستهای یکپارچگی پرداخت، به IBANهایی نیاز دارید که از اعتبارسنجی عبور کنند اما معاملات واقعی را راه نیندازند. یک دسته از IBANهای تستی برای مجموعه تست خودکار تولید کنید، اطمینان حاصل کنید که مدیریت خطای شما برای فرمتهای مختلف کشورها درست کار میکند.
اعتبارسنجی فرم: در حال تست جریان پرداخت هستید؟ از اعتبارسنج استفاده کنید تا تأیید کنید اعتبارسنجی frontend شما با الزامات backend مطابقت دارد. مشکل متداول پذیرش فرمت IBAN است که پردازنده پرداخت شما بعداً آن را رد میکند—کشف این موضوع در حین توسعه از ناراحتی مشتری جلوگیری میکند.
تست موارد حاشیهای: اکثر توسعهدهندگان با یک یا دو فرمت کشور تست میکنند. چه اتفاقی میافتد وقتی مشتری سوئیسی با IBAN 21 کاراکتری از سیستم شما که برای IBANهای آلمانی 22 کاراکتری طراحی شده استفاده میکند؟ فرمتهای مختلف کشورها را تولید کنید تا طول فیلد و منطق اعتبارسنجی خود را به چالش بکشید.
تست رگرسیون: پس از بهروزرسانی کتابخانه اعتبارسنجی IBAN، IBANهای تستی تولید شده را از طریق نسخههای قدیم و جدید اجرا کنید. هر گونه تفاوت نشاندهنده تغییرات شکننده است که میتواند بر تولید تأثیر بگذارد.
توسعه برنامههای مالی
سیستمهای پرداخت: هنگام ساخت عملکرد انتقال بینالمللی وجه، با سناریوهایی مواجه میشوید که خود ساختار IBAN رفتار مسیریابی را تعیین میکند. IBANهای هلند (که شامل حروف در BBAN است) باگهایی را آشکار میکنند که IBANهای عددی آلمان آنها را نشان نمیدهند.
نرمافزار بانکداری: تجزیه IBANها برای استخراج کدهای بانکی و شناسههای شعبه نیازمند منطق خاص کشور است. IBANهایی را برای هر کشور پشتیبانی شده تولید کنید تا تأیید کنید الگوریتم تجزیه شما این اجزا را به درستی شناسایی میکند.
تأیید انطباق: مقررات مالی اغلب نیازمند تأیید IBANها قبل از پردازش هستند. از این ابزار برای ایجاد موارد تستی استفاده کنید که نشان میدهد سیستم شما ارقام بررسی نامعتبر و فرمتهای نادرست را رد میکند—ضروری برای ردیابی حسابرسی.
آموزشی و مستندسازی
آموزش استانداردهای بانکداری: دانشجویانی که در حال یادگیری سیستمهای پرداخت بینالمللی هستند از دیدن ساختارهای IBAN واقعی سود میبرند. نمونههایی از کشورهای مختلف تولید کنید تا نشان دهید استانداردسازی چگونه در سیستمهای بانکی مختلف کار میکند.
مستندسازی API: به جای استفاده از IBANهای احتمالاً واقعی در مستندات فنی خود، نمونههای تمیز تولید کنید. مستنداتی با عبارتهایی مانند "برای تست از IBAN DE89370400440532013000 استفاده کنید" بلافاصله به توسعهدهندگان میگوید که این مقادیر تست امن هستند.
عملیات داده
بذر پایگاه داده: محیطهای توسعه و مرحلهبندی به دادههای تستی واقعی نیاز دارند. IBANهای متنوعی تولید کنید تا پایگاه داده خود را با نمایههای مشتری بینالمللی بدون نگرانی از حریم خصوصی پر کنید.
ناشناسسازی داده: در حال انتقال از تولید به مرحلهبندی هستید؟ IBANهای واقعی را با تولید شدههایی جایگزین کنید که برای تست معتبر هستند و در عین حال اطلاعات حساس را حذف میکنند. بسیار مهم برای انطباق GDPR در محیطهای توسعه.
جایگزینها و زمان استفاده از آنها
ابزارهای مختلف برای نیازهای مختلف مناسب هستند. در اینجا مقایسهای صادقانه آمده است:
APIهای بانکداری تجاری (مانند Stripe، Adyen)
بهترین برای اعتبارسنجی تولید در مقابل دفاتر ثبت بانکی واقعی. این سرویسها بررسی میکنند که آیا یک شماره شبا (IBAN) متناظر با یک حساب فعال است، نه فقط اینکه فرمت آن صحیح است.
زمان استفاده: زمانی که نیاز دارید تأیید کنید یک شماره شبا وجود دارد و میتواند پرداخت دریافت کند، نه فقط اینکه از نظر ساختاری معتبر است.
محدودیتها: هزینه دارد (معمولاً با قیمتگذاری به ازای هر تماس API)، نیاز به کار یکپارچهسازی دارد، و همچنان به شماره شباهای آزمایشی برای توسعه نیاز دارید - که این ابزار به کمک میآید.
کتابخانههای زبان برنامهنویسی (ibantools، iban.js، python-stdnum)
بهترین برای اعتبارسنجی توکار در کد برنامه شما. کتابخانههایی مانند ibantools برای جاوااسکریپت یا python-stdnum برای پایتون، توابع اعتبارسنجی و تولید را ارائه میدهند.
زمان استفاده: زمانی که به دسترسی برنامهنویسی به عنوان بخشی از اعتبارسنجی ساخت یا اجرا نیاز دارید.
محدودیتها: نیاز به تلاش توسعه برای یکپارچهسازی دارد، و همچنان به راهی سریع برای آزمایش دستی شماره شباهای خاص در حین اشکالزدایی نیاز دارید. به همین دلیل یک ابزار وب سریعتر از نوشتن اسکریپتهای آزمایشی است.
ثبت شماره شبای SWIFT
ثبت رسمی شماره شبا که توسط SWIFT نگهداری میشود تمام فرمتهای کشوری و قوانین اعتبارسنجی را لیست میکند. این منبع معتبر است.
زمان استفاده: زمانی که از ابتدا در حال پیادهسازی پشتیبانی شماره شبا هستید و به مشخصات رسمی نیاز دارید.
محدودیتها: این مستندات است، نه یک ابزار. شما همچنان نیاز دارید چیزی را برای تولید و اعتبارسنجی شماره شباها بر اساس این مشخصات بسازید یا پیدا کنید.
اعتبارسنجهای بانکی رسمی
بسیاری از بانکهای ملی اعتبارسنجهای خاص کشور (مانند بوندسبانک برای شماره شباهای آلمان) را ارائه میدهند. اینها برای کشور خاص خود بسیار دقیق هستند.
زمان استفاده: زمانی که فقط با یک کشور کار میکنید و به جزئیات اعتبارسنجی سطح بانک نیاز دارید.
محدودیتها: تمرکز بر یک کشور. اگر سیستمهای پرداخت بینالمللی میسازید، به اعتبارسنجهایی برای هر کشور نیاز خواهید داشت.
زمانی که این ابزار معنا دارد
از این ابزار زمانی استفاده کنید که به آزمایش سریع بدون نیاز به یکپارچهسازی API نیاز دارید. این بهویژه در حین توسعه و اشکالزدایی مفید است که نیاز به تولید فوری دادههای آزمایشی معتبر یا تأیید دلیل شکست اعتبارسنجی یک شماره شبای خاص دارید. این جایگزین کتابخانههای اعتبارسنجی سطح تولید در کدبیس شما نخواهد شد، اما سریعتر از نوشتن اسکریپتهای آزمایشی موقت است.
سؤالات متداول
IBAN چیست و چرا اهمیت دارد؟
IBAN مخفف International Bank Account Number است - یک فرمت استاندارد ایجاد شده توسط سازمان بینالمللی استاندارد (ISO) برای کاهش خطا در پرداختهای بینمرزی. پیش از IBANها، هر کشور از فرمت شماره حساب خود استفاده میکرد که منجر به اشتباهات مکرر و انتقالهای ناموفق میشد. IBANها کدهای کشور و ارقام کنترلی را اضافه میکنند تا خطاها را قبل از جابجایی پول شناسایی کنند.
آیا IBANهای تولید شده دقیق هستند؟
IBANهای تولید شده از نظر ریاضی صحیح هستند و الگوریتم اعتبارسنجی MOD 97 تعریف شده در ISO 13616 را پاس میکنند. آنها ساختارهای کشوری مناسب را رعایت میکنند. با این حال، آنها به صورت تصادفی ایجاد شدهاند و با حسابهای بانکی واقعی مطابقت ندارند - و این دقیقاً هدف است. آنها برای تست کاملاً امن هستند زیرا تصادفاً به یک حساب واقعی برخورد نمیکنند.
این ابزار از چه کشورهایی پشتیبانی میکند؟
در حال حاضر 10 کشور اروپایی: آلمان، انگلستان، فرانسه، اسپانیا، ایتالیا، هلند، سوئیس، اتریش، بلژیک و لهستان. اینها رایجترین فرمتهای IBAN در سیستمهای پرداخت اروپایی را پوشش میدهند. نیاز به کشور دیگری دارید؟ فرم بازخورد بهترین راه برای درخواست افزودن کشورها است.
آیا میتوانم از IBANهای تولید شده برای انتقال پول واقعی استفاده کنم؟
مطلقاً خیر. اینها فقط IBANهای تست هستند. آنها از نظر فرمت معتبر هستند اما به حسابهای بانکی واقعی متصل نیستند. استفاده از آنها برای معاملات واقعی منجر به شکست یا رد پرداخت خواهد شد. آنها فقط برای توسعه، تست و اهداف آموزشی طراحی شدهاند.
اعتبارسنجی IBAN دقیقاً چگونه کار میکند؟
اعتبارسنج چهار بررسی را پشت سر هم انجام میدهد:
- کد کشور: آیا یک کد دو حرفی شناخته شده است؟
- طول: آیا با طول مورد نیاز برای آن کشور مطابقت دارد؟ (آلمان = 22، انگلستان = 22، فرانسه = 27 و غیره)
- نوع کاراکترها: آیا حروف و اعداد در موقعیتهای صحیح بر اساس فرمت کشور قرار دارند؟
- بررسی MOD 97: آیا مجموع اعداد مطابق با ISO 7064 برابر با 1 است؟
اگر هر بررسی شکست بخورد، یک پیام خطای خاص نشان داده خواهد شد.
آیا فاصلهها در IBANها مهم هستند؟
برای اعتبارسنجی، خیر. IBANها معمولاً با فاصله (گروههای چهارتایی) برای خوانایی نمایش داده میشوند، اما فاصلهها تزئینی هستند. DE89 3704 0044 0532 0130 00 و DE89370400440532013000 برای اهداف اعتبارسنجی یکسان هستند. ابزار هر دو فرمت را به طور خودکار پردازش میکند.
آیا دادههای من به سرور ارسال یا در جایی ذخیره میشوند؟
خیر. همه چیز در مرورگر شما با استفاده از JavaScript اجرا میشود. هیچ داده IBAN از دستگاه شما خارج نمیشود، به سرور نمیرسد یا در جایی ذخیره نمیشود. میتوانید این را با باز کردن ابزارهای توسعه مرورگر و مشاهده برگه شبکه تأیید کنید - هیچ درخواستی هنگام تولید یا اعتبارسنجی IBANها مشاهده نخواهید کرد.
اگر نیاز به اعتبارسنجی IBAN از کشوری که در لیست نیست دارم، چه کنم؟
ابزار در حال حاضر فقط از 10 کشور در منوی کشویی پشتیبانی میکند. افزودن موارد بیشتر مستلزم پیادهسازی قوانین فرمت خاص هر کشور است. اگر برای کشورهایی مانند نروژ، سوئد یا سایر کشورها نیاز به اعتبارسنجی دارید، به ما از طریق فرم بازخورد اطلاع دهید - ما اضافات را بر اساس تقاضا اولویتبندی میکنیم.
چرا یک IBAN با فرمت صحیح ممکن است اعتبارسنجی نشود؟
رایجترین دلایل:
- ارقام کنترلی نادرست: حتی یک رقم اشتباه آزمون MOD 97 را ناموفق میکند
- اشتباه تایپی: جابجایی کاراکترها یا ارقام اشتباه در هر جای IBAN
- طول نادرست: کاراکترهای کم یا اضافی برای آن کشور
- کاراکترهای نامعتبر: حروف در جایی که فقط اعداد مجاز هستند، یا برعکس
- کشور پشتیبانی نشده: کد کشور وجود دارد اما در لیست پشتیبانی ما نیست
پیام خطا دقیقاً به شما خواهد گفت که مشکل چیست.
چگونه میتوانم باگ گزارش دهم یا ویژگی درخواست کنم؟
از فرم بازخورد در پایین صفحه استفاده کنید. گزارشهای باگ خاص همراه با مثال IBANها بسیار مفید هستند. برای درخواستهای ویژگی، توضیح مورد استفاده شما به اولویتبندی آنچه ساخته خواهد شد کمک میکند.
تفاوت بین IBAN و کدهای SWIFT/BIC چیست؟
IBANها حسابهای بانکی خاص را شناسایی میکنند، در حالی که کدهای SWIFT/BIC بانکها یا شعب بانکی را شناسایی میکنند. میتوانید اینطور فکر کنید: کد SWIFT به شما میگوید کدام بانک است، IBAN به شما میگوید کدام حساب در آن بانک است. برای انتقالات بینالمللی، اغلب به هر دو نیاز دارید - کد SWIFT به بانک صحیح مسیریابی میشود، سپس IBAN به حساب خاص مسیریابی میشود.
آیا میتوانم یک IBAN را بدون شناختن کشور اعتبارسنجی کنم؟
بله، زیرا دو حرف اول هر IBAN کد کشور هستند. اعتبارسنج این دو حرف اول را میخواند تا تعیین کند کدام فرمت کشور را باید اعمال کند. به همین دلیل تشخیص کشور به طور خودکار انجام میشود - نیازی به انتخاب دستی کشور نیست.
آیا فرمتهای IBAN برای کشورهای خارج از اروپا وجود دارند؟
بله، اما کمتر. اگرچه IBAN در اروپا ایجاد شد و بیشترین پذیرش را در آنجا دارد، کشورهایی مانند عربستان سعودی، امارات متحده عربی، برزیل و دیگران آن را پذیرفتهاند. این ابزار در حال حاضر بر فرمتهای اروپایی تمرکز دارد زیرا آنها اکثریت قریب به اتفاق معاملات بینمرزی را نشان میدهند. ثبت SWIFT IBAN فهرست کامل را نگهداری میکند.
چگونه IBAN را بخوانید و رمزگشایی کنید
آیا تاکنون به یک IBAN مانند DE89370400440532013000 نگاه کردهاید و از خود پرسیدهاید که هر بخش چه معنایی دارد؟ در اینجا نحوه رمزگشایی هر IBAN آمده است:
مرحله ۱: کد کشور (اولین ۲ کاراکتر)
DE= آلمان- نشان میدهد که قوانین فرمت کدام کشور اعمال میشود
مرحله ۲: ارقام کنترلی (۲ کاراکتر بعدی)
89= چکسام محاسبه شده- این ارقام صحت کل IBAN را با استفاده از MOD 97 تأیید میکنند
مرحله ۳: کد بانک (متغیر بر اساس کشور)
37040044در IBANهای آلمان = شناسه ۸ رقمی بانک- کشورهای مختلف طولهای متفاوتی استفاده میکنند (انگلستان ۴ کاراکتر استفاده میکند)
مرحله ۴: شماره حساب (کاراکترهای باقیمانده)
0532013000= شماره حساب واقعی در آن بانک- طول و فرمت بسته به کشور متفاوت است
کشورهای مختلف بخش BBAN را متفاوت سازماندهی میکنند. IBANهای انگلستان شامل کد شعبه ۶ رقمی بین کد بانک و شماره حساب میشوند. IBANهای فرانسه کد بانک، کد شعبه و شماره حساب را با یک کلید کنترلی ترکیب میکنند. درک این تفاوتها هنگام پردازش برنامهنویسی IBANها بسیار مهم است.
خطاهای رایج اعتبارسنجی IBAN و چگونگی رفع آنها
هنگام پیادهسازی اعتبارسنجی IBAN، با این مشکلات به طور مکرر مواجه خواهید شد:
خطای "ارقام کنترلی نامعتبر"
علت: محاسبه MOD 97 برابر با 1 نیست. یا ارقام کنترلی اشتباه هستند، یا خطایی در جای دیگری از IBAN وجود دارد.
راه حل: اعتبارسنجی را پس از تصحیح هرگونه اشتباه تایپی مجدداً اجرا کنید. حتی یک کاراکتر اشتباه در هر جای IBAN باعث شکست رقم کنترلی میشود. این به عمد طراحی شده است - اشتباهات ورود داده را شناسایی میکند.
خطای "طول نامناسب برای کشور"
علت: IBAN دارای کاراکترهای بیش از حد یا کمتر از حد برای کد کشور است.
راه حل: تأیید کنید که کد کشور با کشور مورد نظر مطابقت دارد. IBANهای آلمان همیشه 22 کاراکتر، IBANهای انگلستان 22، و IBANهای فرانسه 27 کاراکتر هستند. کاراکترهای کم یا اضافی نشاندهنده بریدگی یا داده نادرست هستند.
خطای "کاراکترهای نامعتبر"
علت: کاراکترهایی که نباید در آن موقعیت ظاهر شوند - مانند حروف در جایی که فقط اعداد مجاز هستند.
راه حل: فرمت مختص کشور را بررسی کنید. برای مثال، IBANهای آلمان پس از کد کشور و ارقام کنترلی کاملاً عددی هستند، در حالی که IBANهای انگلستان شامل 4 حرف برای کد بانک میشوند.
خطای "کد کشور پشتیبانی نشده"
علت: دو حرف اول یک کد کشور شناخته شده نیستند، یا توسط اعتبارسنج شما پشتیبانی نمیشوند.
راه حل: هجی کد کشور را تأیید کنید. اشتباهات رایج شامل استفاده از UK به جای GB، یا EN به جای کدهای کشور میشود. این ابزار از 10 کشور اروپایی پشتیبانی میکند؛ اعتبارسنجهای تولیدی باید از همه کشورهای ثبت شده در SWIFT پشتیبانی کنند.
فرمت در مقابل وجود حساب
تمایز مهم: اعتبارسنجی تأیید میکند که IBAN از نظر ساختاری صحیح است، نه اینکه حساب واقعاً وجود داشته باشد. یک IBAN میتواند از همه بررسیهای اعتبارسنجی عبور کند اما همچنان با یک حساب بانکی واقعی مطابقت نداشته باشد. برای سیستمهای پرداخت تولیدی، به تأیید اضافی فراتر از اعتبارسنجی فرمت نیاز دارید.
پیادهسازی فنی برای توسعهدهندگان
اگر در حال ساخت پشتیبانی IBAN در برنامه خود هستید، در اینجا نمونه کدهای آزموده شده در زبانهای مختلف وجود دارد. این پیادهسازیها موارد حاشیهای که در محیط تولید با آن مواجه خواهید شد را پوشش میدهند:
اعتبارسنجی IBAN
1function validateIban(iban) {
2 // حذف فاصلهها و تبدیل به حروف بزرگ
3 const cleanedIban = iban.replace(/\s/g, '').toUpperCase();
4
5 // بررسی فرمت پایه
6 if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$/.test(cleanedIban)) {
7 return false;
8 }
9
10 // جابجایی و تبدیل حروف به اعداد
11 const rearranged = cleanedIban.substring(4) + cleanedIban.substring(0, 4);
12 const converted = rearranged.split('').map(char => {
13 if (/[A-Z]/.test(char)) {
14 return (char.charCodeAt(0) - 55).toString();
15 }
16 return char;
17 }).join('');
18
19 // محاسبه مدول 97
20 let remainder = 0;
21 for (let i = 0; i < converted.length; i++) {
22 remainder = (remainder * 10 + parseInt(converted[i], 10)) % 97;
23 }
24
25 return remainder === 1;
26}
27
28// مثال استفاده
29console.log(validateIban('DE89 3704 0044 0532 0130 00')); // true
30console.log(validateIban('GB29 NWBK 6016 1331 9268 19')); // true
31console.log(validateIban('DE89 3704 0044 0532 0130 01')); // false (ارقام کنترل نامعتبر)
321def validate_iban(iban):
2 # حذف فاصلهها و تبدیل به حروف بزرگ
3 iban = iban.replace(' ', '').upper()
4
5 # بررسی فرمت پایه
6 if not (len(iban) > 4 and iban[:2].isalpha() and iban[2:4].isdigit()):
7 return False
8
9 # جابجایی چهار کاراکتر اول به انتها
10 rearranged = iban[4:] + iban[:4]
11
12 # تبدیل حروف به اعداد (A=10, B=11, ..., Z=35)
13 converted = ''
14 for char in rearranged:
15 if char.isalpha():
16 converted += str(ord(char) - 55)
17 else:
18 converted += char
19
20 # بررسی اینکه مدول 97 برابر با 1 است
21 return int(converted) % 97 == 1
22
23# مثال استفاده
24print(validate_iban('DE89 3704 0044 0532 0130 00')) # True
25print(validate_iban('GB29 NWBK 6016 1331 9268 19')) # True
26print(validate_iban('DE89 3704 0044 0532 0130 01')) # False (ارقام کنترل نامعتبر)
271public class IbanValidator {
2 public static boolean validateIban(String iban) {
3 // حذف فاصلهها و تبدیل به حروف بزرگ
4 String cleanedIban = iban.replaceAll("\\s", "").toUpperCase();
5
6 // بررسی فرمت پایه
7 if (!cleanedIban.matches("[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}")) {
8 return false;
9 }
10
11 // جابجایی چهار کاراکتر اول به انتها
12 String rearranged = cleanedIban.substring(4) + cleanedIban.substring(0, 4);
13
14 // تبدیل حروف به اعداد
15 StringBuilder converted = new StringBuilder();
16 for (char c : rearranged.toCharArray()) {
17 if (Character.isLetter(c)) {
18 converted.append(c - 'A' + 10);
19 } else {
20 converted.append(c);
21 }
22 }
23
24 // محاسبه مدول 97
25 BigInteger numeric = new BigInteger(converted.toString());
26 return numeric.mod(BigInteger.valueOf(97)).intValue() == 1;
27 }
28
29 public static void main(String[] args) {
30 System.out.println(validateIban("DE89 3704 0044 0532 0130 00")); // true
31 System.out.println(validateIban("GB29 NWBK 6016 1331 9268 19")); // true
32 System.out.println(validateIban("DE89 3704 0044 0532 0130 01")); // false
33 }
34}
35تولید IBAN
1function generateIban(countryCode) {
2 const countryFormats = {
3 'DE': { length: 22, bbanPattern: '8n10n' },
4 'GB': { length: 22, bbanPattern: '4a6n8n' },
5 'FR': { length: 27, bbanPattern: '5n5n11c2n' }
6 // افزودن کشورهای بیشتر در صورت نیاز
7 };
8
9 if (!countryFormats[countryCode]) {
10 throw new Error(`کد کشور ${countryCode} پشتیبانی نمیشود`);
11 }
12
13 // تولید BBAN تصادفی بر اساس الگوی کشور
14 let bban = '';
15 const pattern = countryFormats[countryCode].bbanPattern;
16 let i = 0;
17
18 while (i < pattern.length) {
19 const count = parseInt(pattern.substring(i + 1), 10);
20 const type = pattern[i];
21
22 if (type === 'n') {
23 // تولید کاراکترهای عددی
24 for (let j = 0; j < count; j++) {
25 bban += Math.floor(Math.random() * 10);
26 }
27 } else if (type === 'a') {
28 // تولید کاراکترهای الفبایی
29 for (let j = 0; j < count; j++) {
30 bban += String.fromCharCode(65 + Math.floor(Math.random() * 26));
31 }
32 } else if (type === 'c') {
33 // تولید کاراکترهای الفبا-عددی
34 for (let j = 0; j < count; j++) {
35 const isLetter = Math.random() > 0.5;
36 if (isLetter) {
37 bban += String.fromCharCode(65 + Math.floor(Math.random() * 26));
38 } else {
39 bban += Math.floor(Math.random() * 10);
40 }
41 }
42 }
43
44 i += 2;
45 }
46
47 // محاسبه ارقام کنترل
48 const checkDigits = calculateCheckDigits(countryCode, bban);
49
50 return countryCode + checkDigits + bban;
51}
52
53function calculateCheckDigits(countryCode, bban) {
54 // ایجاد IBAN اولیه با '00' به عنوان ارقام کنترل
55 const initialIban = countryCode + '00' + bban;
56
57 // جابجایی و تبدیل حروف به اعداد
58 const rearranged = bban + countryCode + '00';
59 const converted = rearranged.split('').map(char => {
60 if (/[A-Z]/.test(char)) {
61 return (char.charCodeAt(0) - 55).toString();
62 }
63 return char;
64 }).join('');
65
66 // محاسبه 98 منهای مدول 97
67 let remainder = 0;
68 for (let i = 0; i < converted.length; i++) {
69 remainder = (remainder * 10 + parseInt(converted[i], 10)) % 97;
70 }
71
72 const checkDigits = (98 - remainder).toString().padStart(2, '0');
73 return checkDigits;
74}
75
76// مثال استفاده
77console.log(generateIban('DE')); // تولید IBAN معتبر آلمان
78console.log(generateIban('GB')); // تولید IBAN معتبر انگلستان
791import random
2import string
3
4def generate_iban(country_code):
5 country_formats = {
6 'DE': {'length': 22, 'bban_format': '8n10n'},
7 'GB': {'length': 22, 'bban_format': '4a6n8n'},
8 'FR': {'length': 27, 'bban_format': '5n5n11c2n'}
9 # افزودن کشورهای بیشتر در صورت نیاز
10 }
11
12 if country_code not in country_formats:
13 raise ValueError(f"کد کشور {country_code} پشتیبانی نمیشود")
14
15 # تولید BBAN تصادفی بر اساس فرمت کشور
16 bban = ''
17 format_str = country_formats[country_code]['bban_format']
18 i = 0
19
20 while i < len(format_str):
21 count = int(''.join(c for c in format_str[i+1:] if c.isdigit()))
22 type_char = format_str[i]
23
24 if type_char == 'n': # عددی
25 bban += ''.join(random.choices(string.digits, k=count))
26 elif type_char == 'a': # الفبایی
27 bban += ''.join(random.choices(string.ascii_uppercase, k=count))
28 elif type_char == 'c': # الفبا-عددی
29 bban += ''.join(random.choices(string.ascii_uppercase + string.digits, k=count))
30
31 i += 1 + len(str(count))
32
33 # محاسبه ارقام کنترل
34 check_digits = calculate_check_digits(country_code, bban)
35
36 return country_code + check_digits + bban
37
38def calculate_check_digits(country_code, bban):
39 # ایجاد رشته برای محاسبه رقم کنترل
40 check_string = bban + country_code + '00'
41
42 # تبدیل حروف به اعداد (A=10, B=11, ..., Z=35)
43 numeric = ''
44 for char in check_string:
45 if char.isalpha():
46 numeric += str(ord(char.upper()) - 55)
47 else:
48 numeric += char
49
50 # محاسبه 98 منهای مدول 97
51 remainder = int(numeric) % 97
52 check_digits = str(98 - remainder).zfill(2)
53
54 return check_digits
55
56# مثال استفاده
57print(generate_iban('DE')) # تولید IBAN معتبر آلمان
58print(generate_iban('GB')) # تولید IBAN معتبر انگلستان
59مراجع و مطالعات بیشتر
- ISO 13616-1:2007 - مشخصات رسمی ساختار IBAN
- ثبت SWIFT IBAN - منبع معتبر برای فرمتهای IBAN مختص کشورها
- ISO 7064:2003 - مشخصات الگوریتم رقم کنترلی MOD 97
- شورای پرداخت اروپا - SEPA - مستندات منطقه پرداخت واحد یورو
- بانک مرکزی اروپا - سیستمهای پرداخت - استانداردهای یکپارچگی بانکداری اروپا
- بانک تسویه بینالمللی - سیستمهای پرداخت - استانداردهای بینالمللی سیستمهای پرداخت
شروع تست شمارههای شبا (IBAN)
برای سیستم پرداخت خود به دادههای تستی نیاز دارید؟ یک شماره شبای معتبر برای هر کشور پشتیبانی شده در بالا تولید کنید، یا یک شماره شبای موجود را برای تأیید ساختار آن جایگذاری کنید. این ابزار کاملاً در مرورگر شما اجرا میشود - بدون ثبتنام، بدون کلید API، بدون ارسال داده به سرورها.
نکته سریع: شمارههای شبا از کشورهای مختلف را برای تست موارد حاشیهای تولید کنید. سیستمهای پرداخت واقعی فرمتهای متنوعی را پشتیبانی میکنند و تست با فرمت یک کشور منبع رایجی از باگهای تولید است.