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