IBAN من المعرفات القليلة التي نشرت قواعدها الداخلية كاملة. اقرأه من اليسار فتمر بثلاث مناطق: رمز بلد، ثم زوج من أرقام التحقق، ثم جزء الحساب الوطني. والمنطقتان الأوليان متطابقتان في كل مكان، أما الثالثة فتتغير هيئتها من بلد إلى آخر.
وهذا الخليط هو ما يجعل المعرف سهل التحليل وسهل الفحص الخاطئ في الوقت نفسه. تفصل هذه المقالة الأجزاء، وتشرح حساب mod-97 الذي يمسك بها معا، وتبين لماذا يعد هذا الحساب أقل ما تخبرك به السلسلة إثارة.
ما هي أجزاء IBAN؟
الاسم اختصار لرقم الحساب المصرفي الدولي، والهدف التصميمي كان أن تحمل سلسلة واحدة من المعلومات ما يكفي لتوجيه حوالة عابرة للحدود دون ورقة تعليمات منفصلة.
| الموضع | الجزء | من يحدده |
|---|---|---|
| أول حرفين | رمز البلد | قائمة معيارية دولية من رموز من حرفين |
| الحرفان التاليان | رقما التحقق | معيار IBAN نفسه، ومتطابقان في كل بلد |
| كل ما يلي ذلك | جزء الحساب الوطني، ويسمى غالبا BBAN | الهيئة الوطنية في البلد المعني |
فرمز البلد يقول أي القواعد الوطنية تنطبق، والرقمان يقولان هل نجت السلسلة من النقل سليمة، والباقي هو الحساب كما يكتبه البلد نفسه. والمنطقة الوسطى وحدها هي التي يعيرها معيار IBAN توحيدا، وهي وحدها التي يمكن التحقق منها دون معرفة تخطيط البلد.
والأمثلة المستخدمة في هذه المقالة عناصر نائبة وهمية اختيرت عن قصد لبيان كيف تتراكب الأجزاء. ولا واحد منها رقم حساب حقيقي، ولا ينبغي أن يقرأ شيء هنا على أنه ادعاء بوجود أي حساب بعينه.
رمز البلد ورقم التحقق في المعيار الدولي
الرقمان اللذان يليان رمز البلد يأتيان من نظام أحرف تحقق متفق عليه دوليا، وهو ترتيب MOD 97-10 الذي ينتمي إلى العائلة التي تستعرضها مقالة خوارزميات رقم التحقق. ولأن الحساب يطوي السلسلة كلها في هذين الموضعين، فإن تغيير أي حرف آخر يبطلهما.
ولهذه الخاصية يستحق الزوج الحساب حتى حين يكون تخطيط البلد مجهولا. فيستطيع إجراء أن يتحقق من الأحرف الأربعة الأولى مقابل بقية السلسلة ويصل إلى استنتاج عن سلامة النقل دون أن يملك أي مواصفة وطنية. وما لا يستطيع فعله هو أن يقرر هل الطول مناسب للبلد المذكور، لأن ذلك الطول مقيم في القواعد الوطنية.
وداخل هذه القواعد الوطنية تتباعد الحقول تباعدا واسعا. فقد يحزم بلد رمز مصرف ورقم حساب في عدد ثابت من المواضع، وقد يضيف بلد آخر فرعا أو علامة عملة أو رقم تحقق وطنيا. ويسجل معيار IBAN طول السلسلة الكلية لكل بلد، أما معنى كل حقل داخلي فيبقى للبلد الذي عرفه.
لماذا يحمل BBAN غالبا رقم تحقق وطنيا أيضا؟
لأن جزء الحساب كان في الأغلب رقما وطنيا عاملا قبل أن يوضع في تنسيق عابر للحدود بزمن طويل. وكانت المصارف قد بنت بالفعل حراستها الخاصة ضد أخطاء النسخ، ولم يزل الغلاف الدولي تلك الحراسة. والنتيجة سلسلة تحمل فحصين مستقلين: الزوج الدولي في المقدمة، وما وضعه البلد في الداخل.
والفحصان محسوبان من مادة مختلفة، فكل منهما يفشل لأسباب مختلفة. فرمز بلد مشوه يكسر الزوج الدولي، ورقم حساب كتب خطأ داخل الجزء الوطني قد يكسر الفحص الوطني أو الزوج الدولي أو كليهما بحسب موضعه. وحين تعيد الأداة أن التنسيق صحيح وأن الفحص فشل، فالتفسير المعتاد أن الجزء الوطني وفحصه لم يتفقا.
ولمن ينفذ ذلك، يعني هذا أن السلسلة نفسها قد تكون صحيحة على مستوى وخاطئة على مستوى آخر، ورسالة تطوي المستويين معا لا تكفي. قل أي فحص فشل، وقل أي جزء من السلسلة يغطيه، لأن موضع المشكلة هو المعلومة التي يحتاجها المستخدم.
تحويل الحروف إلى أرقام: الفكرة خلف mod-97
الحساب يحتاج أرقاما، لكن السلسلة تبدأ بحروف. والجسر هو استبدال: يتحول كل حرف إلى رقم وفق قاعدة منشورة ثابتة، بعد نقل الأحرف الأربعة الأولى إلى نهاية السلسلة. ثم تقسم القيمة المحولة كلها على سبعة وتسعين، والمعرف الصالح هو الذي يترك باقيا محددا.
والسر في إعادة الترتيب لا في الإلحاق. فنقل رمز البلد ورقمي التحقق إلى الخلف يضع الأرقام التي نتحقق منها في نهاية العدد المقسوم، فتؤثر في الباقي تأثيرا مباشرا. وهذا ما يمكن الرقمين الأولين من أن يعملا فحصا على كل ما يليهما.
وينتج عن ذلك نتيجتان لكل من يكتب الكود. الأولى أن القيمة المحولة أطول بكثير مما يستوعبه أي نوع صحيح عادي، فالقسمة نفسها يجب أن تنفذ رقما رقما أو بواسطة أداة أعداد كبيرة؛ ومحاولة تنفيذه بعدد صحيح من أربعة وستين بتا تفيض بصمت وتنتج كلاما لا معنى له على بعض المدخلات. والثانية أن الحروف يجب أن تحول بالتحويل المنشور بالضبط—فالتقريبات، مثل رتبة أبجدية تبدأ من واحد، تعطي باقيا يبدو معقولا وهو خاطئ ببساطة.
لماذا لا يثبت نجاح الفحص وجود الحساب؟
حساب mod-97 يقارن السلسلة بنفسها. وهو لا يعرف أي مصرف ولا أي عميل ولا أي حساب، ولا يستشار أحد في مؤسسة مصدرة عند تشغيله. ويمكن لقيمة أن تحقق الحساب كاملا وألا تنتمي إلى أي حساب على الإطلاق، لأن تحقيق الحساب هو بالضبط ما تفعله أي أداة إنشاء بالتصميم.
أما التحقق من أن الحساب مفتوح وقابل للوصول فهو عملية أخرى بمواصفات كلفة مختلفة. يحتاج استعلاما من دليل حي، وقد يكون محدود المعدل، وقد يكون غير متاح خارج ساعات العمل، وقد يحتاج علاقة تعاقدية لتتمكن من ندائه أصلا. وهذه شؤون حدود بين العميل والخادم، لا شؤون إجراء مجموع التحقق.
ولهذا تصف رسالة الخطأ الصادقة السلسلة. قد تقول إن التنسيق طابق وإن أرقام التحقق صمدت، أو إن الطول لا يناسب رمز البلد المعطى. ويجب ألا تقول إن الحساب موجود، ويجب ألا توحي بأن فحصا فاشلا يعني أن الحساب مغلق أو احتيالي.
للمطورين: التوجيه حسب البلد والطول
التنفيذ في معظمه مسك دفاتر، وفي مسك الدفاتر تسكن العلل.
- طبع المدخل أولا: أزل المسافات والواصلات ووحد حالة الأحرف.
- اقرأ رمز البلد وابحث عنه. وإن كان مجهولا فأعلن نظاما غير معروف لا فحصا فاشلا.
- قارن الطول الكلي بالطول الذي يحدده البلد، وتوقف هناك إن لم يتطابقا، فالحساب لا معنى له على سلسلة بحجم خاطئ.
- شغل تحويل mod-97 وقارن الباقي، مستخدما إجراء يعمل رقما رقما أو أداة أعداد كبيرة.
- تحقق من أي رقم تحقق وطني داخل جزء الحساب بقاعدته الخاصة.
وأبق جدول البلدان في صورة بيانات، لأن الأطوال والتخطيطات تتغير، وأبق النتيجتين منفصلتين في القيمة المعادة: فبلد غير مدعوم ليس حسابا غير صالح. وحين يلصق مستخدم قيمة جاءت من مصدر غير موثوق، تذكر أن التطبيع يزيل العرض ولا شيء غيره، وأنه ليس خطوة إصلاح.
الخطوات التالية
خذ بلدا يدعمه منتجك، واكتب ما يحتويه تخطيطه الوطني، ثم أعد قراءة السلسلة على هذا الأساس. ثم افحص قيمة من طرف إلى طرف في أداة التحقق من الأرقام، واقرأ مقالة الأرقام بلا رقم تحقق للحالة المعاكسة، حيث لا يستطيع الفاحص تأكيد أكثر من الشكل. ولاحظ في أثناء ذلك أن رسالتك يجب أن تتغير تبعا لنوع القاعدة المطبقة، لأن المستخدم لا يريد أن يعرف أن شيئا فشل فحسب، بل يريد أن يعرف أي شيء فشل.