الگوریتم لان: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
جز ربات: تصحیح پیوند به پروژه‌های خواهر و تبدیل کردن پیوندها به خنثی در برابر پروتکل
خط ۱:
'''الگوریتم لان''' یا '''فرمول لان'''، که به الگوریتم "[[هم‌نهشتی (نظریه اعداد)|پیمانه]] ۱۰" نیز مشهور است، یک فرمول ساده برای [[درستی یابی]] تعداد زیادی شماره شناسایی است، مانند شماره کارت های اعتباری، شماره های IMEI و [[شماره ملی]]. این روش توسط Hans Peter Luhn ابداع شد و در [http://www.google.com/patents?id=Y7leAAAAEBAJ U.S. Patent No. ۲،۹۵۰،۰۴۸] توصیف شده.
این الگوریتم به وفور استفاده می شود و به منظور یک [[تابع درهم‌ساز رمزنگارانه]] استفاده نمی شودنمی‌شود. در واقع این روش برای حفاظت در برابر خطاهای تصادفی می باشد نه حملات عمدی. بسیاری از شماره های کارت های اعتباری و شناسه های دولتی از این روش برای متمایز کردن شماره های معتبر از هر جایگشت نا معتبری از اعداد استفاده می شود.
 
== نفاط قوت و ضعف ==
الگوریتم لان همه خطاهای تک رقمی را تشخیص می دهد، و همینطور جابجا شدن دو رقم کنار هم را. ولی جابجایی ۰۹ به ۹۰ و برعکس را نمی تواندنمی‌تواند تشخیص بدهد. و همینطور ۷ تا از ۱۰ تا خطای دوقلو را می تواند تشخیص دهد(این موارد را تشخیص نمی دهدنمی‌دهد: ۲۲ به ۵۵و ۳۳ به ۶۶ یا ۴۴ به ۷۷).
الگوریتم های پیچیده تر مانند الگوریتم [//en.wikipedia.org/w/index.php?title=Verhoeff_algorithm&oldid=446858849 Verhoeff] می توانند خطاهای جابجایی بیشتری را تشخیص دهند. الگوریتم [//en.wikipedia.org/w/index.php?title=Luhn_mod_N_algorithm&oldid=449928878 Luhn mod N‌N] تعمیم این الگوریتم برای رشته های غیر عددی می باشد.
به دلیل اینکه این الگوریتم به ترتیب [[راست به چپ]] روی ارقام عمل می کند و رقم های صفر فقط در صورتی که باعث تغییر مکان شوند نتیجه را تغییر می دهند، اضافه کردن صفر به اول یک رشته عددی محاسبات را تغییر نمی دهدنمی‌دهد. بنابراین، اجرای الگوریتم لان قبل و بعد از اضافه کردن چند رقم صفر به اول رشته نتیجه یکسانی خواهد داشت.
 
== توضیح غیر رسمی ==
این فرمول یک عدد را در برابر رقم تطبیق آن درستی یابی می کند،‌کند، که عموماعموماً به بک شماره حساب پاره ای به منظور تولید شماره حساب کامل اضافه می شود. این شماره حساب باید تست زیر را پاس کند:
# با شروع از اولین رقم سمت راست و حرکت به سمت چپ،‌چپ، یکی در میان رقم های شماره زوج را دو برابر کند.
 
# با شروع از اولین رقم سمت راست و حرکت به سمت چپ،‌ یکی در میان رقم های شماره زوج را دو برابر کند.
# ارقام اعداد دو برابر شده را با اعدادی که دو برابر نشده اند جمع کند.
# اگر جواب جمع در پیمانه ی ۱۰ صفر شود،‌شود، این شماره حساب درست می باشد، در غیر این صورت اعتبار ندارد.
 
{{چپ‌چین}}
سطر ۵۷ ⟵ ۵۶:
{{پایان چپ‌چین}}
 
رقم تطبیق (x) بوسیله ی محاسبه ی ضرب جمع ارقام در ۹ در پیمانه ۱۰ بدست می‌می آید. به بیان Layman:
 
#مجموع ارقام ۶۷ را محاسبه کن(۶۷).
#در ۹ ضرب کن (۶۰۳).
سطر ۶۴ ⟵ ۶۲:
#نتیجه رقم تطبیق می باشد.
 
روش جایگزین: رقم تطبیق بوسیله ی محاسبه تفریق رقم اول مجموع ارقام از ۱۰ بدست می آید.
#مجموع ارقام ۶۷ را محاسبه کن(۶۷).
#رقم یکان آن را در نظر بگیر(۷).
سطر ۷۳ ⟵ ۷۱:
#همه ارقام را یکی در میان از سمت راست دو برابر کن: (1×2) = 2, (8×2) = 16, (3×2) = 6, (2×2) = 4, (9×2) = ۱۸
#مجموع همی ارقام را محاسبه کن (ارقام داخل پرانتز جواب ضرب های مرحله ۱ هستند): + x(رقم تطبیق) + (2) + 7 + (1+6) + 9 + (6) + 7 + (4) + 9 + (1+8) + 7 = x + 67.
#اگر مجموع مضربی از ۱۰ بود،‌بود، شماره حساب احتمالااحتمالاً معتبر می باشد. ۳ تنها رقم معتبر است که مجموع ۷۰ را تولید می کند که مضربی از ۱۰ می باشد.
#بنابراین همه شماره حساب ها نا معتبر هستند بجز ۷۹۹۲۷۳۹۸۷۱۳ که دارای رقم تطبیق درست می باشد.
 
== پیاده سازی درستی یابی رقم تطبیق ==
<!--Do not add more code to this article. The CS MOS discourages multiple code samples, as they are rarely of encyclopedic value.-->
<!--
Do not add more code to this article. The CS MOS discourages multiple code samples, as they are rarely of encyclopedic value.
-->
در [[پایتون (زبان برنامه‌نویسی)|پایتون]]:
<source lang="python">
سطر ۸۷ ⟵ ۸۳:
</source>
 
== محاسبه رقم تطبیق ==
پیاده سازی بالا درستی یک شماره ورودی را با یک شماره تطبیق چک می کند. برای محاسبه رقم تطبیق تغییر کوچکی در پیاده سازی نیاز است:
#سوییج کردن بین ضرب فرد و زوج.
سطر ۱۰۱ ⟵ ۹۷:
</source>
 
=== پیاده سازی های دیگر ===
{{چپ‌چین}}
*[http://sites.google.com/site/abapexamples/javascript/luhn-validation Luhn implementations in Javascript]
سطر ۱۰۹ ⟵ ۱۰۵:
* Ruby: [https://gist.github.com/1182499 Luhn validation], [https://gist.github.com/1409815 Luhn generation]
{{پایان چپ‌چین}}
=== همچنین نگاه کنید ===
 
{{چپ‌چین}}
سطر ۱۱۷ ⟵ ۱۱۳:
{{پایان چپ‌چین}}
 
== منابع ==
{{چپ‌چین}}
{{پانویس}}
<references/>
*{{US patent|۲۹۵۰۰۴۸}}, ''Computer for Verifying Numbers'', Hans P. Luhn, August 23, 1960.
 
سطر ۱۲۶ ⟵ ۱۲۲:
[[رده:الگوریتم‌های چکسام]]
[[رده:هم‌نهشتی در نظریه اعداد]]
[[رده:ویکی‌سازی رباتیک]]