Rubrik: Variablen/Strings · Algorithmen/Mathematik | VB-Versionen: VB2005, VB2008 | 21.01.10 |
Luhn-Algorithmus zum Prüfen von Identifikationsnummern Umsetzung der Luhn-Formel zum Prüfen von Identifikationsnummern, wie bspw. Kreditkartennummern oder 16-stellige HappyDigits-Nummern. | ||
Autor: Dieter Otter | Bewertung: | Views: 13.488 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Der Luhn-Algorithmus, auch bekannt als "mod 10"-Algorithmus dient zur einfachen Prüfung von Identifikationsnummern, wie bspw. Kreditkartennummern oder auch 16-stellige HappyDigits-Nummern.
Es handelt sich hierbei um ein einfaches Prüfverfahren, um die syntaktische Korrektheit der Identifikationsnummer zu bestätigen. Es kann somit im Vorfeld eine gültige Nummer von einer zufälligen Nummer unterschieden werden.
Der Luhn-Algorithmus
Die Berechnung nach der Luhn-Methode erfolgt so:
- Beginnend mit der zweitletzten Ziffer und nach links durchlaufend, verdopple den Wert jeder zweiten Ziffer. Für jede Ziffer aus welcher 10 oder mehr wird, bilde die Quersumme . Zum Beispiel wird 1111 zu 2121 und 8763 wird zu 7733 (von (1+6)7(1+2)3).
- Addiere all diese Zahlen zusammen. Beispiel: 1111 wird 2121, dann 2+1+2+1=6; 8763 wird 7733, dann 7+7+3+3=20.
- Wenn die letzte Ziffer der Gesamtsumme 0 ist (anders gesagt: Wenn Gesamtsumme modulo 10 gleich 0 ist), dann ist die Nummer nach dem Luhn-Algorithmus gültig, sonst nicht. Also ist 1111 nicht gültig (siehe oben, die letzte Ziffer der Gesamtsumme ist 6), 8763 aber schon (siehe oben, die letzte Ziffer von 20 ist 0).
''' <summary> ''' Luhn-Algorithmus zum Prüfen von Identifikationsnummern ''' </summary> ''' <param name="Number">Identifikationsnummer, die geprüft werden soll</param> ''' <returns>True, wenn es sich um eine gültige Nummer handelt, andernfalls False</returns> Public Function CheckLuhn(ByVal Number As String) As Boolean Dim Result As Boolean = False ' Leerzeichen entfernen Number = Number.Replace(" ", "") If Number.Length > 0 Then Dim Digits As Integer = Number.Length Dim parity As Integer = Digits Mod 2 Dim sum As Integer = 0 For i As Integer = 0 To Digits - 1 Dim digit As Integer = Val(Number.Substring(i, 1)) If i Mod 2 = parity Then digit *= 2 If digit > 9 Then digit -= 9 sum += digit Next Result = ((sum Mod 10) = 0) End If Return Result End Function