Ausweis

  • Hallo alle zusammen.

    Frage mich seit gestern Abend, rein aus Interesse, ob es möglich ist, eine Ausweisnummer auf Gültigkeit zu überprüfen. Mit PHP habe ich gesehen, das es geht, aber mit AutoIt? Meine es so, das ein programm nur startet, wenn die Ausweisnummer stimmt.

    Wenn ja, möchte ich nämlich damit etwas bauen.

    Ja, wieso habe ich immer so komische Fragen.

    Den PHP Script könnte ich ja mal posten, aber ob der Hilft weiß ich ja gar nicht. Aber ich meine es ist besser, zuviel zu veröffentlichen, als zu wenig.

    Und wenn es geht, werde ich meine SAW-Sammlung incl. Originaltrainer weiter geben können. SAW ist ja nicht überall für jeden freigegeben. In einigen Ländern ja erst ab 21 oder 18.
    SAW ist wohl der Frauenaktionfilm, aber alle Teile gefallen mir, wenn ich in der Stimmung denn auch bin.

    Spoiler anzeigen
    [autoit]


    <?

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

    include("config.php");

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

    $Zwischensumme = 0;
    $Endsumme = 0;
    $Gesamtkontrolle = false;
    $date_time_array = getdate (time());
    if ((strlen($Block1)) == 11) {
    for ($i = 0; $i <= 8; $i++) {
    $Endsumme = $Endsumme + ((int) substr ($Block1,$i,1)*7);
    $i++;
    $Endsumme = $Endsumme + ((int) substr ($Block1,$i,1)*3);
    $i++;
    $Endsumme = $Endsumme + ((int) substr ($Block1,$i,1));
    }
    $Pruef1 = (int) substr ($Block1,9,1);
    if (($Endsumme % 10) == $Pruef1) {
    $Endsumme = $Endsumme + ($Pruef1*7);
    if ((substr($Block1,10,1)) == "D") {
    $Zwischensumme = 0;
    if (strlen($Block2) == 7) {
    for ($i = 0; $i <= 5; $i++) {
    $ziffer = (int) substr ($Block2,$i,1);
    $Zwischensumme = $Zwischensumme + ($ziffer*7);
    $Endsumme = $Endsumme + ($ziffer*3);
    $i++;
    $ziffer = (int) substr ($Block2,$i,1);
    $Zwischensumme = $Zwischensumme + ($ziffer*3);
    $Endsumme = $Endsumme + $ziffer;
    $i++;
    $ziffer = (int) substr ($Block2,$i,1);
    $Zwischensumme = $Zwischensumme + $ziffer;
    $Endsumme = $Endsumme + ($ziffer*7);
    }
    $Pruef1 = (int) substr ($Block2,6,1);
    if ($Pruef1 == ($Zwischensumme%10)) {
    $Endsumme = $Endsumme + ($Pruef1*3);
    $Zwischensumme = 0;
    if (strlen($Block3) == 7) {
    for ($i = 0; $i <= 5; $i++) {
    $ziffer = (int) substr ($Block3,$i,1);
    $Zwischensumme = $Zwischensumme + ($ziffer*7);
    $Endsumme = $Endsumme + $ziffer;
    $i++;
    $ziffer = (int) substr ($Block3,$i,1);
    $Zwischensumme = $Zwischensumme + ($ziffer*3);
    $Endsumme = $Endsumme + ($ziffer*7);
    $i++;
    $ziffer = (int) substr ($Block3,$i,1);
    $Zwischensumme = $Zwischensumme + ($ziffer*1);
    $Endsumme = $Endsumme + ($ziffer*3);
    }
    $Pruef1 = (int) substr ($Block3,6,1);
    if ($Pruef1== ($Zwischensumme%10)) {
    $Endsumme = $Endsumme + $Pruef1;
    if (($Endsumme % 10) == ((int) substr($Block4,0,1))) {
    $GueltigJahr = (int) substr($Block3,0,2);
    if ($GueltigJahr < 30) {
    $GueltigJahr = $GueltigJahr + 2000;
    If ($date_time_array["year"] >= $GueltigJahr) {
    If ($date_time_array["mon"] >= (int) substr($Block3,2,2))
    If ($date_time_array["mday"] <= (int) substr($Block3,4,2))
    $Gesamtkontrolle = true;
    }
    else $Gesamtkontrolle = true;
    }
    }
    }
    }
    }
    }
    }
    }
    }
    if ($Gesamtkontrolle == true) {
    if ($Modus == 2) {
    $AlterJahr = (int) substr($Block2,0,2);
    if ($AlterJahr > 20) {
    $AlterJahr = $AlterJahr + 1900;
    $Alter = $date_time_array["year"] - $AlterJahr;
    if ($date_time_array["mon"] < (int) substr($Block2,2,2))
    $Alter = $Alter - 1;
    else
    if ($date_time_array["mon"] == (int) substr($Block2,2,2))
    if ($date_time_array["mday"] < (int) substr($Block2,4,2))
    $Alter = $Alter - 1;
    }
    else
    $Gesamtkontrolle = false;
    if ($Alter >= $MinAlter)
    $Gesamtkontrolle = true;
    else
    $Gesamtkontrolle = false;
    }
    }

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

    if ($Gesamtkontrolle == true)
    readfile ($Okay);
    else
    readfile ($Error);
    ?>

    [/autoit]

    Die Config dazu:

    Spoiler anzeigen
    [autoit]


    <?
    // Die HTML Seite, die angezeigt wird wenn dem User Zugang gewährt werden soll
    $Okay = "http://www..person.de/board2/"; hier halt das das Programm weiter läuft

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

    // Die HTML Seite, die angezeigt wird wenn dem User der Zugang verwehrt bleibt
    $Error = "http://www.person.de/ausweis"; hier halt das ein Hinweis komtm, das das Alter nicht ausreicht.

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

    /* Modus = 1 : Die Personalausweisnummer wird lediglich auf Korrektheit überprüft
    Modus = 2 : Das Alter wird errechnet und mit der Variable $MinAlter verglichen */

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

    $Modus = 1;

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

    // Nur für den Modus 2 relevant
    $MinAlter = 21;
    ?>

    [/autoit]

    LG Lina

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Abschreiben?

    Erwischt, setzen, sechs. Ober wie sagen die Lehrkraäfte (Leerkräfte ;) )

    Aber genau durch die Umsetzung in AutoIt, werde ich mich dann ran machen und versuchen zu verstehen, wie man soetwas zum Beispiel PHP in AutoIt unsetzen kann. Das ist doch eine super Idee. Mannnnn, die Idee von Dir, so wieder mehr zu verstehen ist super. Aber so einfach ist das ja gar nicht, wie Du es schreibst. Abschreiben alleine reicht da nämlich gar nicht. Das hatte ich bereits versucht und dann ist es doch im Papierkorb gelandet.

    LG Lina

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • scheint mir einfacher^^

  • Das hatte ich ja probiert.

    Fehler in Reihe 1.
    Nehme ich die raus, folgen weitere Fehler.

    LG Lina

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • @huggy
    "$return->ablauf->tag"

    Das ist für mich OOP und das geht bei AutoIt nicht ;)

    ---------

    Wegen dem Abschreiben:
    Am Codehighlight, finde ich, sieht man dass es garnicht so schwer ist. Man muss die Schreibweise von if und for ändern und die vergleiche von == in = ändern. Die ganzen (int) rausmachen. Und SubStr in die AutoIt-Funktion umschreiben. Die einzige Schwierigkeit ist vllt den PHP-Code zu verstehen.

  • Okay, dann kann Frau das wohl mal vergessen.

    Aber ein Punkt weniger, der einen im Kopf herum geht.

    LG und DANKE, Lina.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Zen Du schreibst doch: "Das ist für mich OOP".

    Wenn es für Dich, als erfahrenen AutoIt-ler schon oop ist, was soll es denn für mich sein. OOP = unmöglich, oder?

    LG Lina
    (Anfängerin)

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    muss weg - code der bei mir ging (nummer oben eingeben!)

    [autoit]

    MsgBox(0, "", _IsValidPersonalausweisID("assesdzsdzsdzdD<<gasdasddaf<oiasdio<<<<<<p"))

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

    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
    Return 1
    EndFunc

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

    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]

    peethebee

  • Hallo peethebee

    Hier mal der Code mit einer gültigen Personalausweisnummer (aus dem INet *fg* ).

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "", _IsValidPersonalausweisID("100152298D<<6910295<0804138<<<<<<<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
    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]

    Man kann auch Buchstaben eingeben, man bekommt immer den Rückgabewert 0. Wo ist denn da der Fehler?

    LG Lina

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Ich schau's mir gleich noch mal an, bin wieder zurück.

    Edit: Deine Nummer stimmt auch nicht - da fehlt im ersten Block eine Ziffer (siehe Wikipedia-Artikel). Der Code ist jetzt um die letzte Prüfziffer vervollständigt und funktioniert mit meiner Nummer:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "", _IsValidPersonalausweisID("bliblablub...1385982353657"))

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

    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

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

    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]

    Die Altersprüfung musst du dann halt mit dem mittleren Block machen, wenn die ID stimmt.

    peethebee

  • Hallo @pee.

    Was meinst du mit: Die Altersprüfung musst du dann halt mit dem mittleren Block machen, wenn die ID stimmt.

    Ausweisnummer okay, dann kommt eine 1, sonst eine 0. Richtig?

    Jetzt werde ich mir gedanken machen, wo das eigentliche Programm rein kommt und wie man daraus ein Gui macht, wo man die Ausweisnummer einträgt.

    Danke und LG, Lina.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Stimmt, aber das geht sicherlich bei mir, wenn ich noch ein halbes Jahr lerne.

    LG Lina

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl