Luhn

Luhn

متوسط

مقدمة

في هيئة التحقق العالمية، أُسنِدت إليك للتو مهمة بالغة الأهمية. في كل أنحاء المدينة، ومن عمليات الشراء عبر الإنترنت إلى تسجيلات الدخول الآمنة، تعتمد عمليات لا تُحصى على دقة المعرّفات الرقمية مثل أرقام بطاقات الائتمان، وأرقام الحسابات المصرفية، ورموز المعاملات، ومعرّفات التتبع. وخوارزمية Luhn معادلة بسيطة للمجموع الاختباري تُستخدم للمساعدة في تحديد الأرقام المكتوبة خطأً.

وصلت للتو إلى مكتبك دفعة من المعرّفات. يجب أن تجتاز جميعها اختبار Luhn للتأكد من أنها سليمة. وإذا فشل أي منها، فسيُوسم بأنه غير صالح، ما يمنع أخطاءً مثل تنفيذ معاملات خاطئة أو فشل التحقق من الحسابات.

فهل تضمن إتمام هذا على النحو الصحيح؟ إن سلامة كثير من الخدمات تعتمد عليك.

التعليمات

حدّد ما إذا كان عدد صحيحًا وفق صيغة Luhn.

سيُقدَّم العدد على هيئة سلسلة نصية.

التحقق من صحة عدد

السلاسل النصية التي طولها 1 أو أقل ليست صحيحة. تُسمح المسافات في المدخل، لكن يجب إزالتها قبل التحقق. ولا يُسمح بأي محرف آخر غير الأرقام.

الأمثلة

رقم بطاقة ائتمان صحيح

العدد المطلوب التحقق منه هو 4539 3195 0343 6467.

الخطوة الأولى في خوارزمية Luhn هي البدء من نهاية العدد ومضاعفة كل رقم ثانٍ، بدءًا من الرقم الثاني من اليمين والانتقال نحو اليسار.

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

إذا كان ناتج مضاعفة رقم أكبر من 9، فإننا نطرح 9 من ذلك الناتج. فنحصل على:

8569 6195 0383 3437

وأخيرًا، نجمع كل الأرقام. إذا كان المجموع يقبل القسمة على 10 دون باقٍ، فالعدد الأصلي صحيح.

8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80

العدد 80 يقبل القسمة على 10 دون باقٍ، لذا فإن العدد 4539 3195 0343 6467 صحيح!

رقم تأمين اجتماعي كندي غير صحيح

العدد المطلوب التحقق منه هو 066 123 478.

نبدأ من نهاية العدد ونضاعف كل رقم ثانٍ، بدءًا من الرقم الثاني من اليمين والانتقال نحو اليسار.

066 123 478
 ↑  ↑ ↑  ↑  (double these)

إذا كان ناتج مضاعفة رقم أكبر من 9، فإننا نطرح 9 من ذلك الناتج. فنحصل على:

036 226 458

نجمع الأرقام:

0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36

العدد 36 لا يقبل القسمة على 10 دون باقٍ، لذا فإن العدد 066 123 478 غير صحيح!

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Cairo Exercism

مستعد لبدء Luhn؟

سجّل في Exercism لتتعلّم وتتقن Cairo عبر 25 مفهومًا68 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.

تعمّق في Luhn!

نستكشف 8 نسخ مختلفة من Luhn، بدءًا من تطبيق Ruby أنيق للغاية، ومرورًا ببعض الأساليب الأمرية والوظيفية، وانتهاءً بنسخة SQLite استغرق فكّها بعض الجهد من Erik و Jeremy!