الخانتان الثالثة والرابعة في كل آيبان هما رقما التحقق. ويُحسبان من كل الخانات الأخرى بطريقة تُسمى MOD 97-10، يحددها معيار ISO/IEC 7064. وحين تكتب آيبان، تعيد البرامج هذا الحساب؛ فإذا جاءت النتيجة خاطئة، ففي الآيبان خطأ كتابي.
التحقق من الآيبان في أربع خطوات
خذ مثال الآيبان الألماني DE89 3704 0044 0532 0130 00.
- احذف المسافات:
DE89370400440532013000. - انقل الخانات الأربع الأولى إلى النهاية:
370400440532013000DE89. - استبدل كل حرف برقمين، حيث A = 10 وB = 11، وهكذا وصولاً إلى Z = 35. هنا يصبح D هو 13 ويصبح E هو 14:
370400440532013000131489. - اقسم هذا العدد على 97 واحتفظ بالباقي. إذا كان الباقي 1، فالآيبان صالح.
في المثال، قسمة 370400440532013000131489 على 97 تترك باقياً قدره 1 بالضبط، إذن رقما التحقق صحيحان.
حساب رقمي التحقق
لإنشاء رقمي التحقق لآيبان جديد، اتبع الخطوات نفسها مع وضع 00 مكان رقمي التحقق:
- اكتب رمز الدولة يليه
00ثم BBAN:DE00370400440532013000. - أعد الترتيب وحوّل الحروف كما سبق:
370400440532013000131400. - احسب باقي القسمة على 97. وهو هنا 9.
- اطرح الباقي من 98: 98 − 9 = 89. وإذا كان الناتج رقماً واحداً فأضف صفراً قبله (مثلاً 7 تصبح 07).
رقما التحقق إذن هما 89، فنحصل على DE89370400440532013000. ولأن ناتج الخطوة 4 يقع دائماً من 2 إلى 98، فإن رقمي التحقق في أي آيبان صالح لا يكونان أبداً 00 أو 01 أو 99.
التعامل مع الأعداد الطويلة
يتكون العدد الناتج عن التحويل من 17 رقماً في النرويج، و24 رقماً في ألمانيا، وأكثر من 40 رقماً في آيبان مالطي يحتوي على حروف. ومعظم هذه الأعداد أطول مما تحتمله آلة حاسبة عادية أو عدد صحيح بحجم 64 بت، الذي يتسع لنحو 19 رقماً. لكن يمكنك تقسيمه إلى أجزاء: خذ أول تسعة أرقام، واحسب الباقي، واكتب هذا الباقي قبل الأرقام التالية، ثم كرر العملية:
| الخطوة | العدد | الباقي بعد القسمة على 97 |
|---|---|---|
| 1 | 370400440 | 23 |
| 2 | 23 + 5320130 = 235320130 | 70 |
| 3 | 70 + 0013148 = 700013148 | 38 |
| 4 | 38 + 9 = 389 | 1 |
الباقي النهائي 1، وهي النتيجة نفسها التي تعطيها القسمة الكاملة.
التحقق نفسه في الكود
بلغة JavaScript، مع معالجة رقم واحد في كل مرة فلا نحتاج إلى أعداد كبيرة:
function isValidIban(input) {
const iban = input.replace(/\s+/g, '').toUpperCase();
if (!/^[A-Z]{2}\d{2}[A-Z0-9]{11,30}$/.test(iban)) return false;
const rearranged = iban.slice(4) + iban.slice(0, 4);
let remainder = 0;
for (const ch of rearranged) {
const value = parseInt(ch, 36); // 0-9 stay digits, A-Z become 10-35
remainder = (value > 9 ? remainder * 100 : remainder * 10) + value;
remainder %= 97;
}
return remainder === 1;
}
وبلغة Python، حيث يمكن أن تكون الأعداد الصحيحة بأي حجم:
def is_valid_iban(value: str) -> bool:
iban = "".join(value.split()).upper()
if not (iban.isascii() and iban.isalnum() and 15 <= len(iban) <= 34):
return False
rearranged = iban[4:] + iban[:4]
digits = "".join(str(int(ch, 36)) for ch in rearranged)
return int(digits) % 97 == 1
هاتان الدالتان تفحصان البنية ورقمي التحقق فقط. أما أداة التحقق الحقيقية فتتأكد أيضاً من أن الدولة تستخدم الآيبان ومن أن الطول يطابق تلك الدولة، وهو ما تذكره صفحة صيغ الدول لكل دولة ندعمها.
للتحقق من آيبان واحد يدوياً، الصقه في مدقق IBAN: فهو يبيّن الفحص الذي فشل، وحين يكون الخطأ في رقمي التحقق وحدهما يعرض الرقمين المناسبين. وإذا كنت تفضّل ألا تصون هذا الكود بنفسك، فإن iban-check مكتبتنا مفتوحة المصدر لـ JavaScript وTypeScript. تُجري كل الفحوص وفق سجل IBAN لدى SWIFT ولا تعتمد على أي حزم أخرى. ثبّتها من npm بالأمر npm install iban-check.
ما الذي يكشفه التحقق
تجيد هذه الطريقة اكتشاف الأخطاء التي يقع فيها الناس عند الكتابة. فأي رقم واحد يُكتب خطأً، وأي تبديل بين رقمين متجاورين، يغيّر الباقي، لذا يُكتشفان دائماً. أما الأخطاء الأخرى فيفلت منها نحو حالة واحدة من كل مئة.
لا يستطيع التحقق أن يخبرك هل الحساب موجود. فقد يشير آيبان برقمي تحقق صحيحين إلى رمز بنك غير موجود، أو إلى حساب أُغلق. ولهذا تجتاز أرقام الآيبان التي ينشئها مولدنا هذا التحقق مع أن أي بنك لم يُصدرها.
أرقام التحقق الوطنية
تضيف بعض الدول أرقام تحقق خاصة بها داخل BBAN، تُحسب وفق قواعد وطنية. ففي الآيبان الإيطالي يبدأ BBAN بحرف يُسمى CIN، وفي الفرنسي والموناكي ينتهي بمفتاح RIB المكون من رقمين (clé RIB)، وفي الإسباني رقما تحقق بين رمز الفرع ورقم الحساب، وفي البلجيكي ينتهي برقمي تحقق. وهذه الفحوص مستقلة عن رقمي التحقق في الآيبان: فقد يجتاز الآيبان تحقق MOD-97 ويفشل مع ذلك في تحقق وطني. ويشرح مقال أرقام التحقق الوطنية في الآيبان كل طريقة، دولةً دولة.
المصادر
- ISO/IEC 7064: نظام حروف التحقق MOD 97-10.
- ISO 13616-1:2020: كيف يستخدمه الآيبان، ومن ذلك تحويل الحروف (من A = 10 إلى Z = 35).
- سجل IBAN لدى SWIFT: أمثلة الآيبان وطول كل دولة.