در سازمان تأیید جهانی، همین حالا مأموریت مهمی به شما سپرده شده است. در سراسر شهر، از خریدهای آنلاین تا ورودهای امن، بیشمار عملیات به دقت شناسههای عددی مانند شمارههای کارت اعتباری، شمارههای حساب بانکی، کدهای تراکنش و شناسههای رهگیری وابستهاند. الگوریتم لوهن یک فرمول سادهی جمع کنترلی است که به شناسایی اعدادی که اشتباه تایپ شدهاند کمک میکند.
دستهای از شناسهها تازه روی میز شما رسیده است. همهی آنها باید در آزمون لوهن قبول شوند تا معتبر بودنشان تضمین شود. اگر هر کدام رد شوند، به عنوان نامعتبر علامتگذاری میشوند و این کار از اشتباهاتی مانند تراکنشهای نادرست یا تأییدهای ناموفق حساب جلوگیری میکند.
میتوانید مطمئن شوید که این کار درست انجام میشود؟ یکپارچگی بسیاری از سرویسها به شما بستگی دارد.
تعیین کنید که آیا یک عدد بر اساس فرمول لان معتبر است یا نه.
عدد بهصورت یک رشته در اختیار شما قرار میگیرد.
رشتههایی با طول ۱ یا کمتر معتبر نیستند. فاصلهها در ورودی مجازند، اما باید پیش از بررسی حذف شوند. تمام نویسههای غیررقمی دیگر مجاز نیستند.
عددی که باید بررسی شود 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
۸۰ بر ۱۰ بخشپذیر است، پس عدد 4539 3195 0343 6467 معتبر است!
عددی که باید بررسی شود 066 123 478 است.
از انتهای عدد شروع میکنیم و هر رقم دوم را دو برابر میکنیم، با شروع از رقم دوم از سمت راست و حرکت به سمت چپ.
066 123 478
↑ ↑ ↑ ↑ (double these)
اگر نتیجهی دو برابر کردن یک رقم بزرگتر از ۹ باشد، ۹ را از آن نتیجه کم میکنیم. به این نتیجه میرسیم:
036 226 458
ارقام را جمع میکنیم:
0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36
۳۶ بر ۱۰ بخشپذیر نیست، پس عدد 066 123 478 معتبر نیست!
در Exercism ثبتنام کنید تا Clojure را همراه با 12 مفهوم105 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.
ما ۸ نسخهی مختلف از Luhn را بررسی میکنیم؛ با یک پیادهسازی بسیار مرتب در Ruby شروع میکنیم، چند رویکرد دستوری و تابعی را میبینیم و در پایان به نسخهای با SQLite میرسیم که رمزگشایی آن برای اریک و جرمی کمی وقت برد!