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