ಲೂನ್ ಅಲ್ಗೊರಿದಮ್ ಕ್ಯಾಲ್ಕುಲೇಟರ್
Luhn Algoritmo Kalkulaator
Sissejuhatus
Luhn algoritm, tuntud ka kui "modulus 10" või "mod 10" algoritm, on lihtne kontrollsumma valem, mida kasutatakse erinevate identifitseerimisnumberite valideerimiseks, nagu krediitkaardinumerid, Kanada sotsiaalkindlustuse numbrid, IMEI numbrid ja riiklikud pakkuja identifikaatori numbrid Ameerika Ühendriikides. See kalkulaator võimaldab teil valideerida numbreid, kasutades Luhn algoritmi, ja genereerida kehtivaid numbreid, mis läbivad Luhn kontrolli.
Kuidas Luhn Algoritm Töötab
Luhn algoritm töötab järgmiselt:
- Alustades parempoolsest numbrist (ilma kontrollnumbrita) ja liikudes vasakule, kahekordista iga teise numbri väärtus.
- Kui selle kahekordistamise operatsiooni tulemus on suurem kui 9, lahuta 9 tulemusest.
- Summa kõik numbrid saadud järjestuses.
- Kui kogu summa modulo 10 on võrdne 0 (kui kogu lõppeb nulliga), siis on number Luhn valemi järgi kehtiv; vastasel juhul ei ole see kehtiv.
Siin on visuaalne esitus Luhn algoritmist:
Valem
Luhn algoritmi saab matemaatiliselt väljendada järgmiselt:
Olgu -ne number, loendades paremalt (ilma kontrollnumbrita) ja liikudes vasakule. Siis valitakse kontrollnumber , et:
Kus on modulo operatsioon.
Kasutusalad
Luhn algoritmil on erinevad rakendused erinevates valdkondades:
- Krediitkaardi valideerimine: Enamik krediitkaardinumbreid valideeritakse Luhn algoritmi abil.
- Kanada sotsiaalkindlustuse numbrid: Luhn algoritmi kasutatakse nende identifitseerimisnumberite kehtivuse kontrollimiseks.
- IMEI numbrid: Mobiiltelefonide IMEI numbrid sisaldavad kontrollnumbrit, mille valideerib Luhn algoritm.
- Riiklik pakkuja identifikaatori (NPI) numbrid: Ameerika Ühendriikide tervishoiusüsteemis kasutatakse neid numbreid Luhn algoritmi abil valideerimiseks.
- ISBN-id: Mõned ISBN-10 numbrid kasutavad valideerimiseks Luhn algoritmi varianti.
Alternatiivid
Kuigi Luhn algoritm on laialdaselt kasutusel, on olemas ka teisi kontrollsumma algoritme erinevate eesmärkide jaoks:
- Damm algoritm: Teine kontrollnumbrite algoritm, mis tuvastab kõik ühekohalised vead ja kõik külgnevate vahetuste vead.
- Verhoeff algoritm: Kompleksem kontrollsumma algoritm, mis tuvastab kõik ühekohalised vead ja enamik vahetusvigu.
- ISBN-13 kontrollnumber: Kasutab erinevat algoritmi kui ISBN-10, mis põhineb Luhn algoritmil.
Ajalugu
Luhn algoritm loodi Hans Peter Luhn'i, IBM-i arvutiteadlase, poolt 1954. aastal. Luhn oli infotehnoloogia valdkonna pioneer ja teda tunnustatakse mitmete uuenduste, sealhulgas KWIC (Key Word In Context) indekseerimissüsteemi, eest.
Algoritm loodi algselt, et kaitsta juhuslike vigade eest, mitte pahatahtlike rünnakute eest. Oluline on märkida, et kuigi Luhn algoritm suudab tuvastada paljusid tavalisi vigu, ei ole see turvaline krüpteerimise vorm ja sellele ei tohiks toetuda andmete turvalisuse eesmärkidel.
Hoolimata oma vanusest jääb Luhn algoritm laialdaselt kasutusele oma lihtsuse ja tõhususe tõttu tavaliste transkriptsioonivigade tuvastamisel.
Rakendamise Näited
Siin on mõned koodi näited Luhn algoritmi rakendamiseks erinevates programmeerimiskeeltes:
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])))
## Näidis kasutamine:
print(luhn_validate(4532015112830366)) # True
print(luhn_validate(4532015112830367)) # False
print(generate_valid_number(16)) # Genereerib kehtiva 16-kohalise numbri
Äärmuslikud Juhud ja Erilised Arvestused
Luhn algoritmi rakendamisel arvestage järgmiste äärmuslike juhtumite ja eriliste arvestustega:
-
Sisendi Valideerimine: Veenduge, et sisend on kehtiv numbrijada. Mitte-numbrilised märgid tuleks käsitleda sobivalt (kas eemaldada või käsitleda kehtetuks sisendiks).
-
Esimese Nulli Probleem: Algoritm peaks õigesti töötama numbritega, millel on esimesed nullid.
-
Suured Numbrid: Olge valmis käsitlema väga pikki numbreid, mis võivad ületada standardsete täisarvutüüpide mahtu mõnedes programmeerimiskeeltes.
-
Tühi Sisend: Määrake, kuidas teie rakendus peaks käsitlema tühje stringe või null sisendeid.
-
Mittestandardsete Märgistikud: Mõnes rakenduses võite kokku puutuda numbritega, mis on esitatud märkidega väljaspool standardset 0-9 vahemikku. Määrake, kuidas neid tuleks käsitleda.
-
Tulemuslikkuse Arvestused: Rakendustes, mis peavad kiiresti valideerima suure hulga sisendeid, kaaluge algoritmi rakenduse optimeerimist.
Numbrilised Näited
-
Kehtiv Krediitkaardi Number:
- Number: 4532015112830366
- Luhn Kontroll: Kehtiv
-
Kehtetu Krediitkaardi Number:
- Number: 4532015112830367
- Luhn Kontroll: Kehtetu
-
Kehtiv Kanada Sotsiaalkindlustuse Number:
- Number: 046 454 286
- Luhn Kontroll: Kehtiv
-
Kehtetu IMEI Number:
- Number: 490154203237518
- Luhn Kontroll: Kehtetu
Testjuhtumid
Luhn algoritmi rakenduse kontrollimiseks võite kasutada järgmisi testjuhtumeid:
def test_luhn_algorithm():
assert luhn_validate(4532015112830366) == True
assert luhn_validate(4532015112830367) == False
assert luhn_validate(79927398713) == True
assert luhn_validate(79927398714) == False
# Testitud genereeritud numbrid
for _ in range(10):
assert luhn_validate(generate_valid_number(16)) == True
print("Kõik testid läbitud!")
test_luhn_algorithm()
Viidatud Allikad
- Luhn, H. P. (1960). "Arvuti numbrite kontrollimiseks". USA patent 2,950,048.
- Gallian, Joseph. "Identifitseerimisnumbrite Matemaatika." College Mathematics Journal, vol. 22, no. 3, 1991, lk. 194–202. JSTOR, www.jstor.org/stable/2686878.
- "ISO/IEC 7812-1:2017". Rahvusvaheline Standardiorganisatsioon. Juurdepääs 2. august 2024.
- Knuth, Donald. "Arvutitehnika Kunst, Köide 2: Seminumerilised Algoritmid". Addison-Wesley, 1997.