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é
 
Interpretationen sind etwas für Philosophen, nichts für den einfachen Menschen Big Grin
Antworten
  


Gehe zu:


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