با داشتن یک عدد مشخص کنید که آیا آن عدد بر اساس فرمول لوهن معتبر است یا نه.
الگوریتم لوهن یک فرمول سادهی چکسام است که برای اعتبارسنجی انواع شمارههای شناسایی، مانند شمارههای کارت اعتباری و شمارههای بیمهی اجتماعی کانادا، به کار میرود.
وظیفه این است که بررسی کنید رشتهی دادهشده معتبر است یا نه.
رشتههایی با طول ۱ یا کمتر معتبر نیستند. فاصلهها در ورودی مجاز هستند، اما باید پیش از بررسی حذف شوند. همهی نویسههای غیررقمی دیگر مجاز نیستند.
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
۵۷ بر ۱۰ بخشپذیر نیست، پس این عدد معتبر نیست.
در Exercism ثبتنام کنید تا Haskell را همراه با 107 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.
ما ۸ نسخهی مختلف از Luhn را بررسی میکنیم؛ با یک پیادهسازی بسیار مرتب در Ruby شروع میکنیم، چند رویکرد دستوری و تابعی را میبینیم و در پایان به نسخهای با SQLite میرسیم که رمزگشایی آن برای اریک و جرمی کمی وقت برد!