Luhn-algoritmus
Kiejtés
- IPA: [ ˈluxnɒlɡoritmuʃ]
Főnév
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
- Jobbról balra haladás:
- Írd le a számjegyeket jobbról balra.
- 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.
- 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)).
- Összes számjegy összeadása:
- Add össze az összes számjegyet, beleértve azokat is, amelyeket nem dupláztál meg.
- É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
- Jobbról balra haladás: [ 7, 6, 4, 6, 3, 4, 3, 0, 8, 8, 4, 1, 9, 3, 5, 4 ]
- 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 ]
- 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 ]
- Összes számjegy összeadása: [ 7 + 3 + 4 + 3 + 3 + 8 + 3 + 0 + 8 + 7 + 4 + 2 + 9 + 6 + 5 + 8 = 80 ]
- É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
- Egyszerűség:
- Könnyen megvalósítható és gyorsan végrehajtható.
- Hatékonyság:
- Hatékonyan kiszűri az elírásokat és véletlenszerű hibákat.
- 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
- Korlátozott biztonság:
- Nem véd a szándékos csalások ellen, mivel az algoritmus könnyen megérthető és reprodukálható.
- Csak hibakeresésre:
- Nem biztosít semmilyen titkosítást vagy adatvédelmet.
Alkalmazások
- Hitelkártyák érvényesítése:
- Bankok és fizetési rendszerek ellenőrzik a kártyaszám érvényességét.
- Egyéb azonosítók ellenőrzése:
- Számlaszámok, személyazonosító számok érvényesítése.
- 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
Tartalom
- Luhn-algoritmus - Értelmező szótár (MEK)
- Luhn-algoritmus - Etimológiai szótár (UMIL)
- Luhn-algoritmus - Szótár.net (hu-hu)
- Luhn-algoritmus - DeepL (hu-de)
- Luhn-algoritmus - Яндекс (hu-ru)
- Luhn-algoritmus - Google (hu-en)
- Luhn-algoritmus - Helyesírási szótár (MTA)
- Luhn-algoritmus - Wikidata
- Luhn-algoritmus - Wikipédia (magyar)