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