Deutsche Personalausweisnummer validieren

  • Hab mal eben eine Funktion geschrieben, die die deutsche Personalausweisnummer auf ihre Richtigkeit überprüft :)

    [autoit]

    #include <GUIConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $gui = GUICreate("Pesonalausweis Überprüfer",350,100)
    GUICtrlCreateLabel("Personalausweisnummer:",10,24)
    $input = GUICtrlCreateInput("",135,20,190,24,$ES_NUMBER)
    $button = GUICtrlCreateButton("Überprüfen",150,60)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    While 1
    ;Damit man nur 10 Ziffern eingibt..
    if StringLen(GUICtrlRead($input)) > 10 Then
    GUICtrlSetData($input,StringLeft(GUICtrlRead($input),10))
    SoundPlay(@WindowsDir & "\media\Windows XP-Ping.wav",0) ;Fehlergeräusch
    EndIf

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $button
    $result = _PersonalausweisCheck(GUICtrlRead($input))
    If $result = 1 Then
    MsgBoX(0,"WohoO","Die Nummer war gültig." & @CRLF & @CRLF & 'Der "Ab 18 Bereich" ist nun für Sie zugänglich.')
    Else
    MsgBox(16,"Oh oh","Die Nummer stimmt leider nicht." & @CRLF & @CRLF & "Bitte versuchen Sie's erneut oder benutzen Sie die von" & _
    @CRLF & "ihren Eltern um in den XXX-Bereich zu gelangen.")
    EndIf
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _PersonalausweisCheck($iNumber)
    ; Checkt, ob die Personalausweisnummber stimmt (nur die ersten 10 Ziffern, ohne das "D" am Ende
    If NOT StringLen($iNumber) = 10 Then
    Return -1
    EndIf

    Local $result = 0

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To 9
    Switch Mod($i,3)
    Case 1
    $result += StringMid($iNumber,$i,1) * 7
    Case 2
    $result += StringMid($iNumber,$i,1) * 3
    Case 0
    $result += StringMid($iNumber,$i,1) * 1
    EndSwitch
    Next

    If StringMid($iNumber,10,1) = (Mod($result,10)) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]

    Vielleicht kann's ja jemand gebrauchen :)
    (Evtl schreib ich auch eine Funktion, die einem eine Nummer sogar erstellt ;D)

    MfG,
    FaNtA

  • Hallo.

    Schöne Idee, doch eine Personalausweisnummer nur anhand der ersten 10 Zahlen zu prüfen ist nicht richtig. Es sind 4 Zahlenblöcke notwenig, wobei der erste Zahlenblock bekanntlich ja mit einem Buchstaben aufhört.

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "", _IsValidPersonalausweisID("1011052398D<<1106134<0805138<<<<<<<2"))

    Func _IsValidPersonalausweisID($_number)
    $_number = StringRegExpReplace($_number, "[< D]", "")
    If _Pruefsumme(StringLeft($_number, 9)) <> StringMid($_number, 10, 1) Then Return 0
    If _Pruefsumme(StringMid($_number, 11, 6)) <> StringMid($_number, 17, 1) Then Return 0
    If _Pruefsumme(StringMid($_number, 18, 6)) <> StringMid($_number, 24, 1) Then Return 0
    If _Pruefsumme(StringTrimRight($_number, 1)) <> StringRight($_number, 1) Then Return 0
    Return 1
    EndFunc

    Func _Pruefsumme($_string)
    Local $multi[3] = [7,3,1]
    $multi_count = 0
    $sum = 0
    For $_i = 1 to StringLen($_string)
    $sum += StringRight(StringMid($_string, $_i, 1)*$multi[$multi_count], 1)
    $multi_count = Mod($multi_count+1, 3)
    Next
    Return StringRight($sum, 1)
    EndFunc

    [/autoit]

    Dieses Script ist nicht von mir erstellt, sondern mir zur freien Verfügung gestellt wurden. Das ist von peethebee

    Gruß, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    3 Mal editiert, zuletzt von Alina (29. September 2007 um 12:07)

  • jetzt nur noch ein script welche eine personummer generiert :D dann sind die unter 18 user auch zufrieden xD

    PS: über 18^^

    snoozy

    //edit:mir ist grad aufgefallen das war post nummer 500!!!!!!
    :kette: