Kiejtés

  • IPA: [ ˈluxnɒlɡoritmuʃ]

Főnév

Luhn-algoritmus

  1. (matematika)

Luhn-algoritmus

A Luhn-algoritmus (más néven modulus 10 vagy mod 10 algoritmus) egy egyszerű ellenőrző számítási módszer, amelyet széles körben használnak hitelkártyaszámok, bankszámlaszámok és más azonosítók érvényességének ellenőrzésére. Az algoritmus képes kiszűrni a véletlen hibákból (pl. egyetlen számjegy elírása vagy felcserélése) eredő érvénytelen számokat.



Algoritmus lépései

  1. Jobbról balra haladás:
    • Írd le a számjegyeket jobbról balra.
  2. Minden második számjegy megduplázása:
    • Az első számjegyet hagyd változatlanul.
    • A második számjegyet (és minden második számjegyet) duplázd meg.
  3. Duplázás utáni számjegyek összegzése:
    • Ha egy számjegy megduplázása kétszámjegyű számot ad (pl. (8 = 16)), add össze a számjegyeket ((1 + 6 = 7)).
  4. Összes számjegy összeadása:
    • Add össze az összes számjegyet, beleértve azokat is, amelyeket nem dupláztál meg.
  5. Érvényesség ellenőrzése:
    • Az azonosító szám érvényes, ha az összeg osztható (10)-nel (azaz az összeg ( = 0)).



Példa

Ellenőrizzük a következő számot: 4539 1488 0343 6467

  1. Jobbról balra haladás: [ 7, 6, 4, 6, 3, 4, 3, 0, 8, 8, 4, 1, 9, 3, 5, 4 ]
  2. Minden második számjegy megduplázása:
    • A jobbról második, negyedik stb. számjegyeket duplázzuk meg: [ 7, (6 ), 4, (6 ), 3, (4 ), 3, (0 ), 8, (8 ), 4, (1 ), 9, (3 ), 5, (4 ) ] [ 7, 12, 4, 12, 3, 8, 3, 0, 8, 16, 4, 2, 9, 6, 5, 8 ]
  3. Duplázás utáni számjegyek összegzése:
    • Ha egy megduplázott számjegy nagyobb mint (9), add össze a számjegyeit: [ 7, (1+2), 4, (1+2), 3, 8, 3, 0, 8, (1+6), 4, 2, 9, 6, 5, 8 ] [ 7, 3, 4, 3, 3, 8, 3, 0, 8, 7, 4, 2, 9, 6, 5, 8 ]
  4. Összes számjegy összeadása: [ 7 + 3 + 4 + 3 + 3 + 8 + 3 + 0 + 8 + 7 + 4 + 2 + 9 + 6 + 5 + 8 = 80 ]
  5. Érvényesség ellenőrzése:
    • Az összeg osztható (10)-nel ((80 = 0)), így a szám érvényes.



Python implementáció

def luhn_algorithm(card_number):
    # Alakítsd át a számjegyeket egy listára
    digits = [int(d) for d in str(card_number)][::-1]
    
    # Alkalmazd az algoritmust
    checksum = 0
    for i, digit in enumerate(digits):
        if i % 2 == 1:  # Második számjegyek duplázása
            digit *= 2
            if digit > 9:  # Ha kétszámjegyű, add össze a számjegyeket
                digit -= 9
        checksum += digit
    
    # Ellenőrizd az érvényességet
    return checksum % 10 == 0

# Példa használat
card_number = 4539148803436467
is_valid = luhn_algorithm(card_number)
print(f"A szám érvényes? {'Igen' if is_valid else 'Nem'}")

Kimenet:

A szám érvényes? Igen

C++ implementáció

#include <iostream>
#include <string>

using namespace std;

bool luhn_algorithm(const string& card_number) {
    int checksum = 0;
    bool is_second = false;

    for (int i = card_number.size() - 1; i >= 0; --i) {
        int digit = card_number[i] - '0';
        if (is_second) {
            digit *= 2;
            if (digit > 9) {
                digit -= 9;
            }
        }
        checksum += digit;
        is_second = !is_second;
    }

    return (checksum % 10 == 0);
}

int main() {
    string card_number = "4539148803436467";
    bool is_valid = luhn_algorithm(card_number);
    cout << "A szám érvényes? " << (is_valid ? "Igen" : "Nem") << endl;
    return 0;
}

Kimenet:

A szám érvényes? Igen

Előnyök

  1. Egyszerűség:
    • Könnyen megvalósítható és gyorsan végrehajtható.
  2. Hatékonyság:
    • Hatékonyan kiszűri az elírásokat és véletlenszerű hibákat.
  3. Széles körben alkalmazott:
    • Használják hitelkártyaszámok, bankszámlaszámok és más azonosítók ellenőrzésére.



Hátrányok

  1. Korlátozott biztonság:
    • Nem véd a szándékos csalások ellen, mivel az algoritmus könnyen megérthető és reprodukálható.
  2. Csak hibakeresésre:
    • Nem biztosít semmilyen titkosítást vagy adatvédelmet.



Alkalmazások

  1. Hitelkártyák érvényesítése:
    • Bankok és fizetési rendszerek ellenőrzik a kártyaszám érvényességét.
  2. Egyéb azonosítók ellenőrzése:
    • Számlaszámok, személyazonosító számok érvényesítése.
  3. Formázási hibák ellenőrzése:
    • Gyors validálás adatbevitel során.



Összegzés

A Luhn-algoritmus egy hatékony és széles körben alkalmazott eszköz az érvényesítési hibák gyors kiszűrésére. Bár nem nyújt biztonságot a szándékos csalások ellen, megbízhatóan működik, ha véletlenszerű elírásokat kell ellenőrizni. Egyszerűsége miatt könnyen beépíthető rendszerekbe és alkalmazásokba.

Fordítások