لوہن الگورڈم کیلکولیٹر
Luhn Algorithm Calculator
تعارف
Luhn الگورڈم، جسے "modulus 10" یا "mod 10" الگورڈم بھی کہا جاتا ہے، ایک سادہ چیک سم فارمولہ ہے جو مختلف شناختی نمبروں کی توثیق کے لیے استعمال ہوتا ہے، جیسے کہ کریڈٹ کارڈ نمبر، کینیڈا کے سوشل انشورنس نمبر، IMEI نمبر، اور ریاستہائے متحدہ میں قومی فراہم کنندہ کی شناخت کے نمبر۔ یہ کیلکولیٹر آپ کو Luhn الگورڈم کا استعمال کرتے ہوئے نمبروں کی توثیق کرنے اور درست نمبروں کی پیداوار کرنے کی اجازت دیتا ہے جو Luhn چیک پاس کرتے ہیں۔
Luhn الگورڈم کیسے کام کرتا ہے
Luhn الگورڈم اس طرح کام کرتا ہے:
- دائیں سے بائیں (چیک ڈیجیٹ کو چھوڑ کر) آخری ڈیجیٹ سے شروع کرتے ہوئے، ہر دوسرے عدد کی قیمت کو دوگنا کریں۔
- اگر اس دوگنا کرنے کی کارروائی کا نتیجہ 9 سے زیادہ ہے تو نتیجے سے 9 کم کریں۔
- نتیجے کی ترتیب میں تمام اعداد کو جمع کریں۔
- اگر کل کا ماڈیولو 10 صفر کے برابر ہے (اگر کل صفر پر ختم ہوتا ہے)، تو پھر نمبر Luhn فارمولے کے مطابق درست ہے؛ بصورت دیگر، یہ درست نہیں ہے۔
یہاں Luhn الگورڈم کی بصری نمائندگی ہے:
فارمولا
Luhn الگورڈم کو ریاضیاتی طور پر اس طرح بیان کیا جا سکتا ہے:
فرض کریں کہ -واں عدد ہے، دائیں سے آخری عدد (چیک ڈیجیٹ کو چھوڑ کر) سے شروع کرتے ہوئے اور بائیں کی طرف بڑھتے ہوئے۔ پھر چیک ڈیجیٹ اس طرح منتخب کیا جاتا ہے کہ:
جہاں ماڈیولو عمل ہے۔
استعمال کے کیسز
Luhn الگورڈم کے مختلف شعبوں میں مختلف ایپلی کیشنز ہیں:
- کریڈٹ کارڈ کی توثیق: زیادہ تر کریڈٹ کارڈ نمبروں کی توثیق Luhn الگورڈم کا استعمال کرتے ہوئے کی جاتی ہے۔
- کینیڈا کے سوشل انشورنس نمبر: Luhn الگورڈم ان شناختی نمبروں کی توثیق کے لیے استعمال ہوتا ہے۔
- IMEI نمبر: موبائل فون کے IMEI نمبر میں ایک چیک ڈیجیٹ شامل ہوتا ہے جو Luhn الگورڈم کے ذریعے توثیق کیا جاتا ہے۔
- قومی فراہم کنندہ کی شناخت (NPI) نمبر: یہ نمبر ریاستہائے متحدہ کے صحت کے نظام میں استعمال ہوتے ہیں، جو Luhn الگورڈم کا استعمال کرتے ہوئے توثیق کیے جاتے ہیں۔
- ISBNs: کچھ ISBN-10 نمبر توثیق کے لیے Luhn الگورڈم کی ایک مختلف شکل استعمال کرتے ہیں۔
متبادل
اگرچہ Luhn الگورڈم وسیع پیمانے پر استعمال ہوتا ہے، لیکن مختلف مقاصد کے لیے دوسرے چیک سم الگورڈمز بھی ہیں:
- Damm الگورڈم: ایک اور چیک ڈیجیٹ الگورڈم جو تمام واحد عدد کی غلطیوں اور تمام متصل تبادلے کی غلطیوں کا پتہ لگاتا ہے۔
- Verhoeff الگورڈم: ایک زیادہ پیچیدہ چیک سم الگورڈم جو تمام واحد عدد کی غلطیوں اور زیادہ تر تبادلے کی غلطیوں کو پکڑتا ہے۔
- ISBN-13 چیک ڈیجیٹ: ISBN-10 سے مختلف الگورڈم کا استعمال کرتا ہے، جو Luhn الگورڈم پر مبنی ہے۔
تاریخ
Luhn الگورڈم کو ہانس پیٹر لuhn نے 1954 میں بنایا تھا، جو ایک IBM کمپیوٹر سائنسدان ہیں۔ Luhn معلوماتی سائنس کے میدان میں ایک پیشرو تھے اور انہیں کئی اختراعات کا سہرا دیا جاتا ہے، بشمول KWIC (کی ورڈ ان کنٹیکسٹ) انڈیکسنگ سسٹم۔
یہ الگورڈم دراصل حادثاتی غلطیوں کے خلاف تحفظ کے لیے ڈیزائن کیا گیا تھا، نہ کہ بدنیتی پر مبنی حملوں کے خلاف۔ یہ نوٹ کرنا ضروری ہے کہ اگرچہ Luhn الگورڈم بہت سی عام غلطیوں کا پتہ لگا سکتا ہے، یہ ڈیٹا سیکیورٹی کے مقاصد کے لیے ایک محفوظ شکل نہیں ہے اور اس پر انحصار نہیں کیا جانا چاہیے۔
اپنی عمر کے باوجود، Luhn الگورڈم اپنی سادگی اور عام نقل کی غلطیوں کو پکڑنے کی مؤثریت کی وجہ سے وسیع پیمانے پر استعمال ہوتا ہے۔
عمل درآمد کے مثالیں
یہاں مختلف پروگرامنگ زبانوں میں Luhn الگورڈم کو نافذ کرنے کے کچھ کوڈ کی مثالیں ہیں:
import random
def luhn_validate(number):
digits = [int(d) for d in str(number)]
checksum = 0
for i in range(len(digits) - 1, -1, -1):
d = digits[i]
if (len(digits) - i) % 2 == 0:
d = d * 2
if d > 9:
d -= 9
checksum += d
return checksum % 10 == 0
def generate_valid_number(length):
digits = [random.randint(0, 9) for _ in range(length - 1)]
checksum = sum(digits[::2]) + sum(sum(divmod(d * 2, 10)) for d in digits[-2::-2])
check_digit = (10 - (checksum % 10)) % 10
return int(''.join(map(str, digits + [check_digit])))
## مثال کے استعمال:
print(luhn_validate(4532015112830366)) # True
print(luhn_validate(4532015112830367)) # False
print(generate_valid_number(16)) # درست 16-عدد نمبر پیدا کرتا ہے
سرحدی کیسز اور خاص غور و فکر
Luhn الگورڈم کو نافذ کرتے وقت، درج ذیل سرحدی کیسز اور خاص غور و فکر پر غور کریں:
-
ان پٹ کی توثیق: یہ یقینی بنائیں کہ ان پٹ ایک درست عددی سٹرنگ ہے۔ غیر عددی کرداروں کو مناسب طریقے سے سنبھالنا چاہیے (یا تو ہٹایا جائے یا غیر درست ان پٹ کے طور پر سمجھا جائے)۔
-
ابتدائی صفر: الگورڈم کو ان نمبروں کے ساتھ صحیح طور پر کام کرنا چاہیے جن میں ابتدائی صفر ہیں۔
-
بڑے نمبر: بہت طویل نمبروں کو سنبھالنے کے لیے تیار رہیں جو کچھ پروگرامنگ زبانوں میں معیاری عددی اقسام کی صلاحیت سے تجاوز کر سکتے ہیں۔
-
خالی ان پٹ: یہ طے کریں کہ آپ کے نفاذ کو خالی سٹرنگز یا نل ان پٹس کے ساتھ کیسے نمٹنا چاہیے۔
-
غیر معیاری کردار کے سیٹ: کچھ ایپلی کیشنز میں، آپ کو ایسے نمبر مل سکتے ہیں جو معیاری 0-9 رینج سے باہر کے کرداروں کے ساتھ پیش کیے جاتے ہیں۔ طے کریں کہ ان کے ساتھ کیسے نمٹا جائے۔
-
کارکردگی کے مسائل: ایسی ایپلی کیشنز کے لیے جو بڑی تعداد میں ان پٹس کو تیزی سے توثیق کرنے کی ضرورت ہوتی ہیں، الگورڈم کے نفاذ کو بہتر بنانے پر غور کریں۔
عددی مثالیں
-
درست کریڈٹ کارڈ نمبر:
- نمبر: 4532015112830366
- Luhn چیک: درست
-
غیر درست کریڈٹ کارڈ نمبر:
- نمبر: 4532015112830367
- Luhn چیک: غیر درست
-
درست کینیڈا کا سوشل انشورنس نمبر:
- نمبر: 046 454 286
- Luhn چیک: درست
-
غیر درست IMEI نمبر:
- نمبر: 490154203237518
- Luhn چیک: غیر درست
ٹیسٹ کیسز
Luhn الگورڈم کے نفاذ کی تصدیق کے لیے، آپ درج ذیل ٹیسٹ کیسز کا استعمال کر سکتے ہیں:
def test_luhn_algorithm():
assert luhn_validate(4532015112830366) == True
assert luhn_validate(4532015112830367) == False
assert luhn_validate(79927398713) == True
assert luhn_validate(79927398714) == False
# پیدا کردہ نمبروں کا ٹیسٹ
for _ in range(10):
assert luhn_validate(generate_valid_number(16)) == True
print("تمام ٹیسٹ کامیاب!")
test_luhn_algorithm()
حوالہ جات
- Luhn, H. P. (1960). "کمپیوٹر نمبروں کی توثیق کے لیے"۔ US Patent 2,950,048۔
- Gallian, Joseph. "شناختی نمبروں کی ریاضیاتیات۔" The College Mathematics Journal, vol. 22, no. 3, 1991, pp. 194–202۔ JSTOR، www.jstor.org/stable/2686878۔
- "ISO/IEC 7812-1:2017"۔ بین الاقوامی تنظیم برائے معیاری سازی۔ 2 اگست 2024 کو حاصل کیا۔
- Knuth, Donald. "کمپیوٹر پروگرامنگ کا فن، جلد 2: سیمی نمائیری الگورڈمز"۔ ایڈیسن ویلی، 1997۔