1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Ausweis Verifikation?!

Dieses Thema im Forum "PHP" wurde erstellt von Chaya_, 30. Dezember 2017.

  1. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    32
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Guten Morgen zusammen,


    ich betreibe eine Domain, in der User einen Fakecheck durchlaufen müssen. Dabei geht es mir in erster Linie auch um das Mindestalter. Der User muss nach deutschem Recht und meinen AGB das Mindestalter von 18 Jahren erreicht haben, ansonsten sollen gewisse Funktionen aus Sicherheitsgründen nicht verfügbar sein.

    Um das Alter auf die leichte Art zu verifizieren, habe ich nun ein Script in Einsatz, welches gewisse Ausweismerkmale ausliest, errechnet und dann verifiziert.

    PHP:
    <?php

    function check_number($id, $checknumber)
    {
        $p   = 7;
        $sum = 0;
        for ($i = 0; $i < strlen($id); $i++) {
            $char = $id{$i};
         
            if ($char >= '0' && $char <= '9')
                $int = intval($char);
            else
                $int = ord($char) - 55;
         
            $sum += $int * $p;
         
            if ($p == 1)
                $p = 7;
            else if ($p == 3)
                $p = 1;
            else if ($p == 7)
                $p = 3;
        }
     
        $last_number = substr(strval($sum), -1);
     
        return $last_number == $checknumber;
    }

    //Gibt die Art (neu vs. alt) des Personalausweis zurück
    function perso_type($id)
    {
        $splits = explode(" ", strtoupper($id));
        if (strlen($splits[0]) == 11 && strlen($splits[1]) == 7 && strlen($splits[2]) == 7 && strlen($splits[3]) == 1) {
            return 'old';
        } else if (strlen($splits[0]) == 10 && strlen($splits[1]) == 7 && strlen($splits[2]) == 8 && strlen($splits[3]) == 1) {
            return 'new';
        } else {
            return 'unknown';
        }
    }

    //Sind die Prüfziffern gültig
    function perso_checksum($id)
    {
        $splits = explode(" ", strtoupper($id));
     
        $checksums  = array();
        $perso_type = perso_type($id);
     
        if ($perso_type == 'unknown') {
            return false;
        }
     
        $checksums[] = array(
            substr($splits[0], 0, 9),
            substr($splits[0], 9, 1)
        );
        $checksums[] = array(
            substr($splits[1], 0, 6),
            substr($splits[1], 6, 1)
        );
        $checksums[] = array(
            substr($splits[2], 0, 6),
            substr($splits[2], 6, 1)
        );
        $checksums[] = array(
            substr($splits[0], 0, 10) . substr($splits[1], 0, 7) . substr($splits[2], 0, 7),
            $splits[3]
        );
     
     
        //Überprüfung der Checksummen
        foreach ($checksums as $checksum) {
            if (!check_number($checksum[0], $checksum[1])) {
                return false;
            }
        }
     
        return true;
    }

    //Ist der Perso noch gültig?
    function perso_gueltig($id)
    {
        $splits = explode(" ", $id);
     
        $valid_until = mktime(0, 0, 0, substr($splits[2], 2, 2), substr($splits[2], 4, 2), "20" . substr($splits[2], 0, 2));
     
        //Ist der Perso noch gültig
        if (time() > $valid_until)
            return false;
     
        return true;
    }

    //Informationen aus dem Perso beziehen
    function perso_info($id)
    {
        $splits = explode(" ", $id);
     
        //$return: Ein Objekt mit den Daten aus der Ausweisnummer
        $return             = new stdClass();
        $return->perso_type = perso_type($id);
        $return->geb        = new stdClass();
        $return->geb->tag   = $splits[1]{4} . $splits[1]{5}; //Geburtstag
        $return->geb->monat = $splits[1]{2} . $splits[1]{3}; //Geburtsmonat
        $return->geb->jahr  = $splits[1]{0} . $splits[1]{1}; //Geburtsjahr
        if ($return->geb->jahr > intval(date("y"))) {
            $return->geb->jahr = "19" . $return->geb->jahr;
        } else {
            $return->geb->jahr = "20" . $return->geb->jahr;
        }
     
     
        $alter = date("Y") - $return->geb->jahr;
     
        //Hatte er schon Geburtstag?
        if ((date("n") < $return->geb->monat) OR (date("n") == $return->geb->monat AND date("j") < $return->geb->tag)) {
            $alter--;
        }
     
        $return->alter = $alter;
     
        if ($alter >= 18) {
            $return->volljaehrig = true;
        } else {
            $return->volljaehrig = false;
        }
     
        $return->ablauf        = new stdClass();
        $return->ablauf->tag   = $splits[2]{4} . $splits[2]{5}; //Ausweis Ablauf Tag
        $return->ablauf->monat = $splits[2]{2} . $splits[2]{3}; //Ausweis Ablauf Monat
        $return->ablauf->jahr  = "20" . $splits[2]{0} . $splits[2]{1}; //Ausweis Ablauf Jahr
     
        if ($return->perso_type == 'old') {
            $return->herkunft = $splits[0]{10};
        } else {
            $return->herkunft = $splits[2]{7};
        }
        //Ein Deutscher?
        if (strtolower($return->herkunft) == "d") {
            $return->deutscher = true;
        } else {
            $return->deutscher = false;
        }
        //Behördenkennzahl als Nummer
        $return->behoerdenkennzahl = substr($splits[0], 0, 4);
     
     
        return $return;
    }

    if (isset($_GET['check'])) {
        $perso_id = $_POST['ida'] . " " . $_POST['idb'] . " " . $_POST['idc'] . " " . $_POST['idd'];
     
        if (perso_checksum($perso_id)) {
            echo "Verifizierung Erfolgreich!";
         
            if (!perso_gueltig($perso_id)) {
                echo "<br> <b>Perso ist abgelaufen!</b>";
            }
            echo "<br><br> Daten der Ausweisnummer: <pre>";
            $data = perso_info($perso_id);
            print_r($data);
            echo "</pre>";
         
        } else {
            echo "Verifizierung Fehlgeschlagen!<br><br>";
        }
    }
    ?>

    Neuer Personalausweis:<br>
    <form action="?check=1" method="post" >
        IDD &lt;&lt; <input type="text" size="10" maxlength="10" name="ida">&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
        <input type="text" size="7" maxlength="7" name="idb"> &lt; <input type="text" size="8" maxlength="8" name="idc">&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<input type="text" size="1" maxlength="1" name="idd"> <br>
        <input type="submit" value="Verifizieren">
    </form>
    <br>
    <hr>
    <br>
    Alter Personalausweis:<br>
    <form action="?check=1" method="post" >
        <input type="text" size="11" maxlength="11" name="ida">&lt;&lt;
        <input type="text" size="7" maxlength="7" name="idb">&lt;
        <input type="text" size="7" maxlength="7" name="idc">&lt;&lt;&lt;&lt;&lt;
        <input type="text" size="1" maxlength="1" name="idd"> <br>
        <input type="submit" value="Verifizieren">
    </form>

    Nun möchte ich folgende Daten in meine Datenbank eintragen:

    Dazu soll dann noch in die Datenbank eingetragen werden wenn diese Daten vorhanden sind in eine Tabelle namens AltersVerifizier 1|0 und damit möchte ich dann in gewisse Bereiche meiner Seite arbeiten. Sprich, wenn bei der Spalte AltersVerifiziert eine 0 in der UserID steht, bekommt der Benutzer auf den entsprechenden Bereich wo die Abfrage gemacht wird keinen zugriff und wird dann via header verfahren zur Verifikation geworfen. Also so:

    PHP:
    if(!isset($_SESSION['altersverifiziert'])) {
        header("Location: verify.php");
    }
    Den Wert möchte ich halt individuell als Session behandeln, da ich so nicht alles X mal aus der Datenbank neu abfragen muss.
     
  2. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Hallo am letzten Tag des Jahres :) Ähhm ich verstehe die Frage dahinter nicht genau!?
     
  3. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    32
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Wie setze ich oben beschriebenes Scenario um? Danke :D
     
  4. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    32
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Mein bisheriger Code:

    PHP:
    <?php

    session_start();

    require_once 'inc/header.class.php';

    if(!isset($_SESSION['user_id']) || !isset($_SESSION['logged_in'])) {
       
        header('Location: ../log-in.php');
        exit;
    } else if(!isset($_SESSION['altersverifiziert'])) {
        header('Location: ../alterscheck.php');
        exit;
    }

    ?>

    <link rel="stylesheet" type="text/css" href="/css/chat.css">


    <div class="container mt-4">
        <h2 class="display-4 mb-4">
            Allgemeiner Chat
        </h2>
        <hr />
        <div id="alerts">
        </div>

        <div class="row">
            <div id="wrapper">
                <div id="menu">
                    <p class="welcome">Angemeldet als, <b><?php echo $_SESSION['username']; ?></b></p>
                </div>
            </div>
        </div>
        <div class="card mb-4">
            <div class="card-header">
                <i class="fa fa-fw fa-info"></i> Heute ist der <?php echo date('d.m.Y'); ?> und es ist <?php echo date("H:i:s"); ?> uhr!          
            </div>
        </div>

        <div class="col-sm-3 col-sm-offset-4 frame">
                <ul></ul>
                <div>
                    <div class="msj-rta macro" style="margin:auto">                      
                        <div class="text text-r" style="background:whitesmoke !important">
                            <input class="mytext" placeholder="Type a message"/>
                        </div>
                    </div>
                </div>
            </div>
    </div>
    </div>
    <!-- container -->
    </div>

    <?php require_once 'inc/footer.class.php'; ?>
     
  5. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Hast du denn schon eine Datenbankklasse und/oder Login/Register ? Also existiert schon etwas oder ist bis jetzt alles pseudocode?
     
  6. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Ich habe mir mal die Mühe gemacht und habe dir mal grob den Prozess zusammengestellt. Ich bitte um Verständnis wenn ich etwas vergessen haben sollte. Das Diagramm soll als eine Art Pseudodiagramm dienen. Ich denke, dass du damit aber auf jeden Fall etwas anfangen kannst.

    Prozess.jpg
     
    SilverHazard und Chaya_ gefällt das.
  7. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    32
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Also der Chat ist hier aufrufbar : https://www.erotik-paradies.org

    Ja ich habe schon ein System angefertigt, aber noch nicht das Design beendet btw mir von wo anders Inspiration geholt. Das Login / Register System ist auch vorhanden und das Passwort wird verschlüsselt.

    [​IMG]

    Desweiteren schaut es so aus:

    [​IMG]

    Dein Diagramm ist schon vor deiner Onlinestellung so in meinem Kopf gewesen ;) Gleicher Gedanke :D
     
  8. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    64
    Zustimmungen:
    48
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Nette Umschreibung ^^

    Na dann ab an die Umsetzung :p
    Woran genau hängt es denn aktuell?
    Was hast du davon bisher schon umsetzen können? Gibt es Code, den du uns geben kannst?
     
  9. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    32
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Nun, den LogIn Code mag ich ungerne ausgeben zwecks Manipulation im allgemeinen :) Aber ja, es gibt Code. Gerne via TeamViewer, aber so ganz öffentlich stellen mag ich den nicht zwingend.

    Woran es hapert. Das Script im ersten Beitrag soll gewisse Werte in die Datenbank schreiben, aber da hapert es, dann sollen wenn gewisse Werte vorhanden sind diese in die Datenbank geschrieben werden und in einen einzigen SESSION Wert gespeichert werden. DD-MM-YYYY (Geburtsdatum) und noch andere Werte. Die Berechnung soll weiterhin nicht jedem bekannt sein, da man sonst gewisse Werte mit mechanischen Mittel verfälschen könnte.
     
  10. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    64
    Zustimmungen:
    48
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Aus vergangenen Sitzungen mit dir über TeamViewer muss ich leider ehrlich sagen, dass mir das viel zu chaotisch war und ich darauf aktuell tatsächlich wenig Lust habe.

    Bitte genauer!
    "da hapert es" hilft nicht wirklich, außer dass ich dir jetzt sagen kann, dass der Fehler in Zeile 37 liegt.

    Hmmmm..... Möchtest du evtl deinen Algorithmus nochmal überdenken und lieber eine sichere Herangehensweise wählen?
    Ich verlinke hier gerne nochmal auf Security by Obscurity
     
  11. Chaya_

    Chaya_ Member

    Registriert seit:
    5. Juli 2017
    Beiträge:
    32
    Zustimmungen:
    7
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Germany
    Homepage:
    Im ersten Beitrag steht dennoch weiterhin alles was wichtig ist. ich muss das ja nicht erneut betonen was da rein soll, da ich es mehrfach geschrieben habe, Ich will nur Wissen wie am besten!
     
  12. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    64
    Zustimmungen:
    48
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Was da rein soll habe ich so ungefähr verstanden, da du aber um Hilfe bittest und niemanden bezahlen willst, der das für dich programmiert, wäre es gut, wenn du
    1. Nicht so gereizt reagieren würdest und es im Zweifelsfall den Personen, die helfen wollen, nochmal genauer/anders erklärst
    2. Sagst, was du bereits hast und wo genau du welches Problem hast.
    3. Du die Antworten genauer durchlesen würdest.
      @3HMonkey hat dir diese Frage schon sehr detailliert beantwortet, du musst das nur noch in Code umsetzen.
     

Diese Seite empfehlen

Die Seite wird geladen...