Bu məqaləni lazımdır. |
Bu məqalədəki məlumatların üçün əlavə mənbələrə ehtiyac var. |
Luhn alqoritmi — ABŞ alimi Hans Peter Luhn tərəfindən yaradılmışdır. Alqoritm Kredit kartlarınının, IMEI nömrələrinin doğruluğunu yoxlamaq üçün yaradılmışdır. Kredit kartlarının 16 rəqəmli Buraxıcı identifikasiya nömrəsi (Eng:Issuer identification number) olur və hər bir kartın özünəməxsus xüsusiyyətləri olur. Məsələn Visa kartları 4 rəqəmi ilə, MasterCardlar 51–55 ilə başlamalıdır.
IIN mömrələrinin gerçəkliyini yoxlamaq üçün Lhun alqoritmindən istifadə edirlər.
Bu alqoritm hal-hazırda ən çox online satış mağazalarında istifadə olunur, kredit kartlarının doğruluğunu İnternet üzərindən Banka sorğu göndərməklə də təyin etmək olur amma bu alqoritm (Lhun) daha sürətli işləməyə imkan verir.
Alqoritmin işləmə prinsipi
Alqortimin işləmə prinspini nümunə üzərində göstərək.
16 rəqəmli kredit kartı nömrəmiz olsun.
1234 — 5678 — 9012 — 3459
- Cüt indeksdə yerləşən ədələri toplayırıq => (2+4+6+8+0+2+4+9=35)
- Tək indeksdə yerləşən ədədləri 2-ə vururuq => (2=6=10=14=18=2=6=10)
- 2-ə vurduğumuz ədələrin rəqəmlərinin cəmin tapırıq => (2+6+(1+0)+(1+4)+(1+8)+2+6+(1+0)=32
- 2-ə vurduqdan sonra alınan nəticə 9 dan böyük olarsa həmin ədəddən 9 çıxaraq rəqəmlərin cəmini almış olarıq. 14 rəqəmi üçün: 1 + 4 = 5 <=> 14–9 = 5
- Altda və üstə tapdığımız ədədləri toplayırıq => (35 + 32 = 67)
- Ən son tapdığımız ədədi 10-a bölürük => (67 / 10 = 6.7)
Əgər 10-a tam bölünürsə o zaman bu nömrələr keçərlidir (yəni bir kredit kartına aiddir).
Alqorimin işləməsinə şəkil üzərində baxaq.
Proqramlaşdırma Dillərində Təsviri
Pascal
function CheckLuhn(purportedCC: String): Boolean; var i: Integer; Sum: Integer; Digit: Integer; begin Sum := 0; for i := Length( purportedCC ) downto 1 do begin Digit := Ord( purportedCC[ i ] ) - Ord( '0' ); if Odd( i ) then Inc( Summ, Digit ) else Inc( Summ, Digit*2 mod 10 ); end; Result := Summ mod 10 = 0; end;
Python Proqramlaşdırma dilində
def luhn_checksum(card_number): def digits_of(n): return [int(d) for d in str(n)] digits = digits_of(card_number) odd_digits = digits[-1::-2] even_digits = digits[-2::-2] checksum = 0 checksum += sum(odd_digits) for d in even_digits: checksum += sum(digits_of(d*2)) return checksum % 10 def is_luhn_valid(card_number): return luhn_checksum(card_number) == 0
C++ Proqramlaşdırma dilində
#include <iostream> using namespace std; int toInt(const char c) { return c-'0'; } int confirm( const char *id) { bool is_odd_dgt = true; int s = 0; const char *cp; for(cp=id; *cp; cp++); while(cp > id) { --cp; int k = toInt(*cp); if (is_odd_dgt) { s += k; } else { s += (k!=9)? (2*k)%9 : 9; } is_odd_dgt = !is_odd_dgt; } return 0 == s%10; } int main( ) { const char * t_cases[] = { "49927398716", "49927398717", "1234567812345678", "4532138662787834", NULL, }; for ( const char **cp = t_cases; *cp; cp++) { cout << *cp << ": " << confirm(*cp) << endl; } return 0; }
Java proqramlaşdırma dilində
public class Luhn { static boolean checkLuhn(String cardNo) { int nDigits = cardNo.length(); int nSum = 0; boolean isSecond = false; for (int i = nDigits - 1; i >= 0; i--) { int d = cardNo.charAt(i) - '0'; if (isSecond) d = d * 2; nSum += d / 10; nSum += d % 10; isSecond = !isSecond; } return (nSum % 10 == 0); } public static void main(String[] args) { System.out.println(Luhn.checkLuhn("4035501000000008")); } }
// Package luhn daxil edilən kodun Luhn alqortiminə uyğun olub olmadığını yoxlayır package luhn // Valid: daxil edilən kodun Luhn alqortiminə uyğun olub olmadığını yoxlayır func Valid(number string) bool { var total, currentNumber int var shouldDouble bool number = strings.TrimSpace(number) if len(number) < 2 { return false } for i := len(number) - 1; i >= 0; i-- { if unicode.IsSpace(rune(number[i])) { continue } if !unicode.IsDigit(rune(number[i])) { return false } currentNumber = int(number[i] - '0') if shouldDouble { currentNumber *= 2 if currentNumber > 9 { currentNumber -= 9 } } shouldDouble = !shouldDouble total += currentNumber } return total%10 == 0 }
Həmçinin Bax
- Bank card number
- Java dilində proqram kodu və kredit kart nömrəsinin düzgünlüyünün yoxlanması.
- C dilində proqram kodu.
wikipedia, oxu, kitab, kitabxana, axtar, tap, meqaleler, kitablar, oyrenmek, wiki, bilgi, tarix, tarixi, endir, indir, yukle, izlə, izle, mobil, telefon ucun, azeri, azəri, azerbaycanca, azərbaycanca, sayt, yüklə, pulsuz, pulsuz yüklə, haqqında, haqqinda, məlumat, melumat, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, şəkil, muisiqi, mahnı, kino, film, kitab, oyun, oyunlar, android, ios, apple, samsung, iphone, pc, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, web, computer, komputer
Bu meqaleni vikilesdirmek lazimdir Lutfen meqaleni umumvikipediya ve redakte qaydalarina uygun sekilde tertib edin Bu meqaledeki melumatlarin yoxlanila bilmesi ucun elave menbelere ehtiyac var Lutfen meqaleye etibarli menbeler elave ederek onu tekmillesdirmeye komek edin Menbesiz mezmun problemler yarada ve siline biler Problemler hell edilmemis sablonu meqaleden cixarmayin Daha etrafli melumat ve ya meqaledeki problemlerle bagli muzakire aparmaq ucun diqqet yetire bilersiniz Luhn alqoritmi ABS alimi Hans Peter Luhn terefinden yaradilmisdir Alqoritm Kredit kartlarininin IMEI nomrelerinin dogrulugunu yoxlamaq ucun yaradilmisdir Kredit kartlarinin 16 reqemli Buraxici identifikasiya nomresi Eng Issuer identification number olur ve her bir kartin ozunemexsus xususiyyetleri olur Meselen Visa kartlari 4 reqemi ile MasterCardlar 51 55 ile baslamalidir IIN momrelerinin gercekliyini yoxlamaq ucun Lhun alqoritminden istifade edirler Bu alqoritm hal hazirda en cox online satis magazalarinda istifade olunur kredit kartlarinin dogrulugunu Internet uzerinden Banka sorgu gondermekle de teyin etmek olur amma bu alqoritm Lhun daha suretli islemeye imkan verir Alqoritmin isleme prinsipiAlqortimin isleme prinspini numune uzerinde gosterek 16 reqemli kredit karti nomremiz olsun 1234 5678 9012 3459 Cut indeksde yerlesen edeleri toplayiriq gt 2 4 6 8 0 2 4 9 35 Tek indeksde yerlesen ededleri 2 e vururuq gt 2 6 10 14 18 2 6 10 2 e vurdugumuz edelerin reqemlerinin cemin tapiriq gt 2 6 1 0 1 4 1 8 2 6 1 0 32 2 e vurduqdan sonra alinan netice 9 dan boyuk olarsa hemin ededden 9 cixaraq reqemlerin cemini almis olariq 14 reqemi ucun 1 4 5 lt gt 14 9 5 Altda ve uste tapdigimiz ededleri toplayiriq gt 35 32 67 En son tapdigimiz ededi 10 a boluruk gt 67 10 6 7 Eger 10 a tam bolunurse o zaman bu nomreler kecerlidir yeni bir kredit kartina aiddir Alqorimin islemesine sekil uzerinde baxaq Proqramlasdirma Dillerinde TesviriPascal function CheckLuhn purportedCC String Boolean var i Integer Sum Integer Digit Integer begin Sum 0 for i Length purportedCC downto 1 do begin Digit Ord purportedCC i Ord 0 if Odd i then Inc Summ Digit else Inc Summ Digit 2 mod 10 end Result Summ mod 10 0 end Python Proqramlasdirma dilinde def luhn checksum card number def digits of n return int d for d in str n digits digits of card number odd digits digits 1 2 even digits digits 2 2 checksum 0 checksum sum odd digits for d in even digits checksum sum digits of d 2 return checksum 10 def is luhn valid card number return luhn checksum card number 0 C Proqramlasdirma dilinde include lt iostream gt using namespace std int toInt const char c return c 0 int confirm const char id bool is odd dgt true int s 0 const char cp for cp id cp cp while cp gt id cp int k toInt cp if is odd dgt s k else s k 9 2 k 9 9 is odd dgt is odd dgt return 0 s 10 int main const char t cases 49927398716 49927398717 1234567812345678 4532138662787834 NULL for const char cp t cases cp cp cout lt lt cp lt lt lt lt confirm cp lt lt endl return 0 Java proqramlasdirma dilindepublic class Luhn static boolean checkLuhn String cardNo int nDigits cardNo length int nSum 0 boolean isSecond false for int i nDigits 1 i gt 0 i int d cardNo charAt i 0 if isSecond d d 2 nSum d 10 nSum d 10 isSecond isSecond return nSum 10 0 public static void main String args System out println Luhn checkLuhn 4035501000000008 Package luhn daxil edilen kodun Luhn alqortimine uygun olub olmadigini yoxlayir package luhn Valid daxil edilen kodun Luhn alqortimine uygun olub olmadigini yoxlayir func Valid number string bool var total currentNumber int var shouldDouble bool number strings TrimSpace number if len number lt 2 return false for i len number 1 i gt 0 i if unicode IsSpace rune number i continue if unicode IsDigit rune number i return false currentNumber int number i 0 if shouldDouble currentNumber 2 if currentNumber gt 9 currentNumber 9 shouldDouble shouldDouble total currentNumber return total 10 0 Hemcinin BaxBank card number Java dilinde proqram kodu ve kredit kart nomresinin duzgunluyunun yoxlanmasi C dilinde proqram kodu