Luhn

Luhn

متوسط

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

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

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

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

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

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

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

4539 3195 0343 6467

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

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

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

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 این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Haskell Exercism

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

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

بررسی عمیق Luhn!

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