Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Chatregistrierung
#1
Es wäre sehr schön (um Fake-Adressen zu vermeiden), wenn bei der Registrierung eine Ausweisüberprüfung integriert wäre.
Wenn die Ausweis-ID richtig ist, das dann die Registrierung erst abgeschlossen wird. Diese Funktion könnte man theroretisch im Adminmenue ein- oder ausschalten.

Eine Überprüfungsroutine wäre dieses z.B.
PHP-Code:
<?php

 
//Pruefnummer ueberpruefen
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]) == && strlen($splits[2]) == && strlen($splits[3]) == 1) {
 return 
'old';
 } else if(
strlen($splits[0]) == 10 && strlen($splits[1]) == && strlen($splits[2]) == && 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,0substr($splits[2], 22) , substr($splits[2], 42) , "20".substr($splits[2], 02));
 
 
  //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], 04);
 
 
 
  return $return;
}
 
 
 
//Beispiel zur Verwendung
if(isset($_GET['check'])) {
 
  $perso_id $_POST['ida']." ".$_POST['idb']." ".$_POST['idc']." ".$_POST['idd'];
 
  //Oder:
 
  //$perso_id = "1234567891D 2345678 9012345 6"
 
 
  if(perso_checksum($perso_id)) {
 
     echo "Personalausweisnummer korrekt!";
 
 
  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>";
 
 
     //Zugriff z.B. so:
 
     //Alter: $data->alter;
 
     //Geburtsmonat: $data->geb->monat;
 
     //Ablauftag: $data->ablauf->tag;
 
  } else {
 
     echo "Personalausweisnummer falsch!<br><br>";
 
  }
}
?>
 
 
<!-- Kleines Anwendungsbeispiel -->
Neuer Personalausweis:<br>
<form action="?check=1" method="post" >
IDD << <input type="text" size="10" maxlength="10" name="ida"><<<<<<<<<<<<<<<<<br>
<input type="text" size="7" maxlength="7" name="idb"> < <input type="text" size="8" maxlength="8" name="idc"><<<<<<<<<<<input type="text" size="1" maxlength="1" name="idd"> <br>
<input type="submit" value="ueberpruefen">
</form>
 
<br><hr><br>
 
Alter Personalausweis:<br>
<form action="?check=1" method="post" >
<input type="text" size="11" maxlength="11" name="ida"><<
<input type="text" size="7" maxlength="7" name="idb"><
<input type="text" size="7" maxlength="7" name="idc"><<<<<
<input type="text" size="1" maxlength="1" name="idd"> <br>
<input type="submit" value="ueberpruefen">
</form> 
Antworten
#2
Hi! Ich würde den Codeschnipsel gut aufheben und dann bei Bedarf in die benutzte Version an gewünschter Stelle einfügen...

Gruß

Onkel_Unbekannt
... der Held vom Erdbeerfeld! Cool
Antworten
#3
Codes bitte IMMER in die entsprechenden BBCode Klammern verpacken.

Wird nicht eingebaut.


Warum?

Darum -> klick mich


Der Aufwand lohnt den Nutzen nicht.
Es gibt keine dummen Antworten - nur dumme Fragen.
Antworten
#4
eigentlich ne gute idee, nur eines kannste glauben. damit verlierste  mehr user als du welche gewinnst. Cool dennopch kannste/ solltest du das snipped aufheben. wer weiß wozu es mal gut sein kann. mfg rené
 
Das Problem ist nicht das Problem, das Problem ist der Nutzer, der das Problem verursacht. 
Was lernen wir ? 
Wir entfernen einfach den Nutzer und das Problem ist gelöst !  Tongue
Antworten
  


Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste