Luhn Algorithm (or) Mod10 Algorithm
Published: 2023-10-18 08:13:19

---
title: Luhn Algorithm (or) Mod10 Algorithm
published: true
date: 
tags: 
canonical_url: 
---

ခုချိန်က Social Media တွေကို VPN ခံသုံးနေရတဲ့အချိန်ဖြစ်တယ်။ များသောအားဖြင့် Free VPN တွေသုံးကြတာများပါတယ်။ကျွန်တော်ကတော့ Free Trial ကိုပဲသုံးတယ်။ကြော်ငြာတွေကိုမျက်စိနောက်လို့။ ခုပြောမယ့်အဓိကအကြောင်းအရင်းက Bank Card တွေအကြောင်းနဲ့ Validated Random Visa အကြောင်းကိုပြောပြသွားမှာပါ။နပ်တဲ့သူအတွက်ဆိုရင်အသုံးဝင်ပါလိမ့်မယ်။ Bank Card တွေကထုတ်တဲ့ Card အမျိူးအစားတွေကိုကြည့်ရင် Visa,master , American Express စသဖြင့်အမျိုးအစားများစွာရှိတာကိုတွေ့ရပါမယ်။Card Number တွေကို Bank တွေက Customer အတွက် ထုတ်ပေးတဲ့အခါ Algorithm တွေသုံးပြီးထုတ်ပေးပါတယ်။ ### သူတို့ဘယ် Algorithm ကိုသုံးသလဲ? Bank တွေအသုံးအများဆုံး Algorithm က Luhn Algorithm ဖြစ်ပါတယ်။IBM က Computer Scientist ကတီထွင်ခဲ့တာဖြစ်ပါတယ်။ သူက Credit Card Number တွေကို Valid ဖြစ်မဖြစ်စစ်တဲ့နည်းကိုဖန်တီးခဲ့တာဖြစ်တယ်။ ဒါ့ကြောင့်သူ့နာမည်ကိုအစွဲပြုပြီး Luhn Algorithm လို့ခေါ်တာဖြစ်တယ်။ ### Luhn Algorithm အလုပ်လုပ်ပုံ Credit Card Number တွေကို Valid ဖြစ်မဖြစ်စစ်တဲ့အခါ သမာရိုးကျနည်းလမ်းနဲ့ Database ထဲ မှာသိမ်းပြီး User ရဲ့ Credit Card မှန်မမှန်တိုက်စစ်တာမဟုတ်ပါဘူး။ Weak Point များပါတယ်။ ဒါ့ကြောင့် Algorithm သုံးပြီးတိုက်စစ်ပါတယ်။ #### ဘယ်လိုတွက်သလဲ? တွက်ချက်တဲ့လုပ်ငန်းစဉ်ကြ‌တော့သင်္ချာသုံးပြီးတွက်တာပဲဖြစ်တယ်။ Card Number => 5300 7219 7517 4530 အထက်ပါ Card number ကို Valid ဖြစ်မဖြစ်တွက်ကြည့်ပါမယ်။ Card Number ကို Index No 0 ကနေစသတ်မှတ်လိုက်ပါ။ ပြီးတဲ့နောက်မှာ မကိန်းတွေကို ပေါင်းလိုက်ပါ။ အထက်ပါဉပမာမှာဆိုရင် မကိန်းတွေက `3+0+2+9+5+7+5+0` ရဲ့ပေါင်းလဒ်ကိုပေါင်းရမှာဖြစ်ပါတယ်။ဒီတော့ပေါင်းလဒ်က 31 ရပါတယ်။ ပြီးနောက် \* စုံကိန်းတွေကို 2 နဲ့မြှောက်ပါတယ်။ \* ၉ ထက်ကြီး ရင် ပေါင်းလို့ရတာကိုယူရပါတယ်။ \* ဉပမာ - 18 ဆိုရင် 1+8 = 9 ကို ယူရပါတယ်။ ဒီတော့စုံကိန်းပေါင်းလဒ်က 29 ရပါတယ်။ စုံကိန်းပေါင်းလဒ် => 29 မကိန်းပေါင်းလဒ် => 31 စုစုပေါင်း => 60 ‌နှစ်ခုပေါင်းလို့ရတဲ့ရလဒ်ကို 10 နဲ့ ထပ်စားတဲ့အခါ အကြွင်း (Modulus) က 0 ဖြစ်နေရင် Valid ဖြစ်ပါတယ်။မဟုတ်ရင် Invalid ဖြစ်ပါတယ်။ အထက်ပါနည်းက Math နဲ့တွက်တဲ့ပုံစံပါ။ Programmer ကတော့ ကိုယ်နှစ်သက်တဲ့ Programming Language သုံးပြီး Implement လုပ်ယုံပါပဲ။ ဒီနေရာမှာ စုံကိန်းကိုနှစ်နဲ့မြှောက်လို့ရတဲ့ရလဒ် က 9 ထက်ကြီးသွားရင် 9 ပြန်နုတ်လိုက်တာကလည်း ပေါင်းတာနဲ့အတူတူပါပဲ။ \*\*For Example\*\* 9 \* 2 = 18 = 1 + 8 = 9 9 \* 1 = 18 = 18 - 9 = 9 ကိုယ်ကြိုက်နှစ်သက်သလို Program ပြန်ရေးနိုင်ပါတယ်။ကျွန်တော်က Flexible ဖြစ်တာကိုပြောပြတာ။ အထက်ပါ အတိုင်း Bank တွေက Bank Card Number တွေကိုစစ်ပါတယ်။ ကျွန်တော်ကတော့ Validator အပြင် Credit Card Number Generator ပါတဲ့ package လေးရေးထားပါတယ်။ Package မှာ Main Feature နှစ်မျိုးပါပါတယ်။ \*\*Validation\*\* နဲ့ \*\*Validated Credit Card Number\*\* ထုတ်ပေးခြင်းပါ။ Package နှစ်ခုလုံးက CLI Support ပေးပါတယ်။ CLI ကနေလည်းစမ်းကြည့်လို့ရပါတယ်။ CLI အတွက်တော့ရည်ရွယ်တာမဟုတ်ပါဘူး။ Validation ကတော့ ကိုယ်ရဲ့ Credit Card Number 💳 တွေ Valid ဖြစ်မဖြစ်စစ်လို့ရမှာဖြစ်တယ်။ Developer ဆိုရင်‌တော့ Payment Method တွေမှာထည့်ပြီးစစ်လို့ရမယ်။ သတိထားရမှာက Card Number ကို ပဲ Valid ဖြစ်မဖြစ်ပဲစစ်လို့ရမှာပဲ‌‌ဆိုတာပါ။ တကယ်သုံးရင် Billing Date နဲ့ CVV/CSV တို့ကိုပါတိုက်စစ်ဖို့လိုပါမယ်။ Generator ကတော့ ရှင်းပါတယ်။ Valid ဖြစ်တဲ့ Card Number တွေကို Algorithm သုံးပြီးစစ်ထုတ်လိုက်ပါတယ်။ Billing Date နဲ့ CVV ကတော့ Random ထုတ်ပေးလိုက်ပါတယ်။ Generator ကနေထွက်လာတဲ့ကောင်တွေကို Google Play Store မှာသုံးလို့ရပါတယ်။ သို့မဟုတ် အခြား ကိုယ်သုံးချင်တဲ့နေရာတွေမှာသုံးကြည့်လို့ရပါတယ်။ ဒါပေမဲ့ Porn Site တွေတော့သွားမလုပ်ပါနဲ့။မရပါဘူး။သူတို့ကတကယ့်ဘဏ်တွေနဲ့ချိတ်စစ်ထားတာမို့လို့ပါ။ Only Fan တော့ရပါတယ် ကိုယ့်ဘာသာသုံးတတ်သလို ချဲ့ထွင်သုံးပါ။ Validate လုပ်တဲ့အခါ ငါ့ Credit Card ကြီးများခိုးသွားမှာလားစိုးရိမ်စရာရှိပါတယ်။ ခိုးစရာမရှိပါဘူး။ True/False ပဲ ပြန်ပေးတာမို့လို့ပါ။ Opens source ဖြစ်လို့ Source Code တွေကိုသွားကြည့်လို့ရပါတယ်။ \*\*Validator \*\* https://github.com/amm834/luhn \*\*Generator\*\* https://github.com/amm834/cc အသုံးပြုပုံသေးစိတ်ကို အထက်က Link တွေကနေပဲသွားကြည့်နိုင်ပါတယ်။ ခုချက်ချင်းသုံးဖို့ဆိုရင် အောက်ပါအတိုင်းလုပ်နိုင်ပါတယ်။ Requirement ကတော့ မိမိရဲ့ Linux OS ဖြစ်စေ၊ Window oS ဖြစ်စေ၊ Mac OS ဖြစ်စေ Node နဲ့ NPM ပါဖို့လိုပါတယ်။ Android (aarch64/arm64) တွေကတော့ Termux လိုအပ်ပါမယ်။ Android ဖုန်းပေါ်မှာ Development Environment Seup လုပ်ပုံကိုအောက်ပါ Link ကနေသွားကြည့်နိုင်ပါတယ်။ https://amm834.github.io/Development-Environment-Setup-For-Android/ \*\*Installation\*\* Globally သုံးမယ်ဆိုရင် ``` npm install - g panify panify - g 489504 ``` ထွက်လာတဲ့ Format က Array Object format ပါ။ ```javascript [{ card_number: 4895042852684341, month: 2, year: 2025 }, ...] ``` Card number ကို Validate ဖြစ်မဖြစ်စစ်ကြည့်လို့ရပါတယ်။ ထွက်လာတဲ့ Card Number ကို Copy ယူလိုက်ပါ။ပြီးရင် Validate ဖြစ်မဖြစ်အောက်ပါအတိုင်းစစ်လို့ရပါတယ်။ ``` panify--validate 4895042852684341 ➜ ~panify--validate 4895042852684341 ✅ Your credit card numbers 4895042852684341 is valid 🎉 ``` အထက်မှာသုံးပြတာက CLI မှာအလွယ်သုံးချင်တဲ့အခါ သုံးတဲ့ပုံပါ။ Project တွေမှာ သုံးဖို့ဆိုရင်တော့ အထက်မှာဖော်ပြထားတဲ့ GitHub Repo မှာသွားကြည့်လို့ရပါတယ်။ Free Trail သုံးဖို့ဆိုရင်တော့စိတ်ချရပါတယ်။ ကျွန်တော်ခုလည်းသုံးနေတာမို့လို့ပါ။ Contribution လုပ်ချင်ရင်လည်းလာလုပ်လို့ရပါတယ်နော်။‌ နောက်ပိုင်းထပ်ထည့်မယ့် Feature လေးထပ်ထည့်ချင်ရင်ထည့်လို့ရပါတယ်။ ကျွန်တော်စဉ်းစားထားတာက‌တော့ Credit Card တွေရဲ့ ဖွက်ထားတဲ့ No ရှာဖို့ပါ။ \*\*Example\*\* - 4895041928xxxxxxx ဒါ့ကြောင့် Contribute လုပ်ချင်ရင်လာလုပ်ပါ။