Luhn

Luhn

آسان

دستورالعمل‌ها

با داشتن یک عدد، تعیین کنید که آیا بر اساس فرمول لان معتبر است یا نه.

الگوریتم لان یک فرمول ساده‌ی جمع کنترلی است که برای اعتبارسنجی انواع شماره‌های شناسایی، مانند شماره‌های کارت اعتباری و شماره‌های بیمه‌ی اجتماعی کانادا، به کار می‌رود.

وظیفه این است که بررسی کنید آیا رشته‌ی داده‌شده معتبر است یا نه.

اعتبارسنجی یک عدد

رشته‌هایی با طول ۱ یا کمتر معتبر نیستند. فاصله‌ها در ورودی مجازند، اما باید پیش از بررسی حذف شوند. استفاده از سایر نویسه‌های غیررقمی مجاز نیست.

مثال ۱: شماره‌ی کارت اعتباری معتبر

4539 3195 0343 6467

نخستین گام الگوریتم لان این است که هر رقم دوم را، با شروع از سمت راست، دو برابر کنیم. این ارقام را دو برابر می‌کنیم:

4_3_ 3_9_ 0_4_ 6_6_

اگر دو برابر کردن یک رقم، عددی بزرگ‌تر از ۹ به دست بدهد، ۹ را از حاصل‌ضرب کم کنید. حاصل دو برابر کردن این ارقام:

8569 6195 0383 3437

سپس همه‌ی ارقام را با هم جمع کنید:

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

اگر مجموع بر ۱۰ بخش‌پذیر باشد، آن عدد معتبر است. این عدد معتبر است!

مثال ۲: شماره‌ی کارت اعتباری نامعتبر

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

۵۷ بر ۱۰ بخش‌پذیر نیست، پس این عدد معتبر نیست.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Nim Exercism

آماده‌اید Luhn را شروع کنید؟

در Exercism ثبت‌نام کنید تا Nim را همراه با 70 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.

بررسی عمیق Luhn!

ما ۸ نسخه‌ی مختلف از Luhn را بررسی می‌کنیم؛ با یک پیاده‌سازی بسیار مرتب در Ruby شروع می‌کنیم، چند رویکرد دستوری و تابعی را می‌بینیم و در پایان به نسخه‌ای با SQLite می‌رسیم که رمزگشایی آن برای اریک و جرمی کمی وقت برد!