Luhn

Luhn

متوسط

مقدمة

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

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

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

التعليمات

حدّد ما إذا كان رقم بطاقة ائتمان صحيحًا وفق صيغة Luhn.

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

التحقق من رقم

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

مثال 1: رقم بطاقة ائتمان صحيح

4539 3195 0343 6467

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

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

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

8569 6195 0383 3437

ثم اجمع جميع الأرقام:

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

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

مثال 2: رقم بطاقة ائتمان غير صحيح

8273 1232 7352 0569

ضاعف الأرقام في المواضع الثانية، بدءًا من اليمين

7253 2262 5312 0539

اجمع الأرقام

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57 لا يقبل القسمة على 10 دون باقٍ، لذا فإن هذا الرقم غير صحيح.

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

مستعد لبدء Luhn؟

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

تعمّق في Luhn!

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