Personalausweißnummer

Security

Erfahrenes Mitglied
Hallo,
ich hab da so ein kleiner PHP-Script geschrieben, welches die Personalausweißnummer auf die Gültigkeit überprüft und ob man mindestens 16 Jahre alt ist.

Es ist in zwei Teile geteilt, zum einen die Indexdatei(index.php) zum ausfüllen und ein File(check.php) zum Prüfen der Angaben.

Index.php:
HTML:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Personalausweißnummer</title>
</head>
<body>
<form name="Anmeldung" enctype="text/plain" method="post" action="check.php">
 <input type="text" name="serial" maxlength="10" width="10" />D&lsaquo;&lsaquo;
 <input type="text" name="birthday" maxlength="7" width="7" />&lsaquo;
 <input type="text" name="expiration" maxlength="7" width="7" />&lsaquo;&lsaquo;&lsaquo;&lsaquo;&lsaquo;&lsaquo;&lsaquo;
 <input type="text" name="all" maxlength="1" width="1" />
 <br>
 <input type="submit" value="ID Checken" />
 <input type="reset" value="Zur&uuml;cksetzten" />
</form>
</body>
</html>

check.php:
PHP:
 <?php
   function check_number($number=0){ 
	  $p = 7; 
	  for($i=0; $i < strlen(strval($number)); $i++){ 
		 $return += substr($number[$i]*$p, -1); 
		 if($p==1) $p=7; 
		 elseif($p==3) $p=1; 
		 elseif($p==7) $p=3; 
	  } 
   return $return; 
   } 
   function perso_check($id=0){ 
	  $array = explode(" ", $id); 
	  if(substr(check_number(substr($array[0], 0, 9)), -1)==substr($array[0], 9, 1)){ $check["serial"] = true; } 
	  if(substr(check_number(substr($array[1], 0, 6)), -1)==substr($array[1], 6, 1)){ $check["birthday"][0] = true; } 
	  if(substr(check_number(substr($array[2], 0, 6)), -1)==substr($array[2], 6, 1)){ $check["expiration"][0] = true; } 
	  if(time() < mktime(0,0,0, substr($array[2], 2, 2) , substr($array[2], 4, 2) , substr($array[2], 0, 2))){ $check["expiration"][1] = true; } 
	  if(substr(check_number(substr($array[0], 0, 10).substr($array[1], 0, 7).substr($array[2], 0, 7)), -1)==$array[3]){ $check["all"] = true; } 
	  if($check["serial"] == true && $check["birthday"][0] == true && $check["expiration"][0] == true && $check["expiration"][1] == true && $check["all"] == true){ return true; } 
	  else { return false; } 
   } 
   function age_check($age=0){
	  $birth = array(substr($age, 0, 2), substr($age, 2, 2), substr($age, 4, 2));
   
   
   $date = array(date(y), date(m), date(d));
   $date[0] = $date[0] - 16;
   
   if($date[0] < $birth[0]){
	return false;}
   elseif($date[1] < $birth[1]){
	return false;}
   elseif($date[2] < $birth[2]){
  return false;}
   else{
	return true;};
 }
   
# Aufruf
   $sum = $_POST['serial'] + "D " + $_POST['birthday'] + " " + $_POST['expiration'] + " " + $_POST['all'];
   
   if(perso_check($sum)==true) { 
	  echo "Personalnummer korrekt"; 
   }
   elseif(age_check($_POST['birthday'])==false) {
	 echo "Du bist nicht alt genug.";
   }
   else { 
	  echo "Personalnummer falsch"; 
   } 
?>

So das sieht für mich eigentlich ganz gut aus, aber es geht nicht.
Wäre nett wenn sich jemand die Zeit nimmt und mir unter die Arme greift.
 
Fehlermeldung:

Notice: Undefined variable: return in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 12

Notice: Undefined offset: 1 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 23

Notice: Undefined variable: return in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 17

Notice: Undefined offset: 1 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 23

Notice: Undefined offset: 2 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 24

Notice: Undefined variable: return in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 17

Notice: Undefined offset: 2 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 24

Notice: Undefined offset: 2 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 25

Notice: Undefined offset: 2 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 25

Notice: Undefined offset: 2 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 25

Notice: Undefined offset: 1 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 26

Notice: Undefined offset: 2 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 26

Notice: Undefined variable: return in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 12

Notice: Undefined offset: 3 in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 26

Notice: Undefined index: serial in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 27

Notice: Use of undefined constant y - assumed 'y' in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 35

Notice: Use of undefined constant m - assumed 'm' in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 35

Notice: Use of undefined constant d - assumed 'd' in /www/usersites/g-l/longhorn/pub/Persocheck/check.php on line 35
Du bist nicht alt genug.
 
ich wollt dir nicht weiterhelfen, aber mußte unbedingt etwas los werden ^^

ich habe/hatte mal gelesen das ein *persönalausweißnummercheck* gesetzlich nicht mehr erlaubt ist...
Früher gabs mal so einen hack / addon für wbb2 doch die mußten dieses auch abschaffen damit sie keine probleme mit der gesetz haben...
das ist nur zu info :)
nicht schlecht gemeint..
Grüße
 
Nein das ist Falsch, der Algorythmus zum Ver- und Entschlüssen ist bekannt und legal.
Wäre nett wenn lieber mal jemand zum Thema schreibt.
 
Probier mal Folgendes:
PHP:
<?php

	function check_number($number)
	{
		$return = 0;
		if( empty($number) || is_numeric($number) ) {
			return false;
		}
		$p = 7;
		for($i=0; $i<strlen(strval($number)); $i++) {
			$return += substr($number[$i]*$p, -1);
			if( $p == 1 ) {
				$p = 7;
			} elseif( $p == 3 ) {
				$p = 1;
			} elseif( $p == 7 ) {
				$p = 3;
			}
		}
		return $return;
	}

	function perso_check($id)
	{
		$check = array(
			'serial'        => false,
			'birthday'      => false,
			'expiration'    => false,
			'all'           => false
		);
		$array = explode(' ', $id);
		if( count($array) != 3 ) {
			return false;
		}

		if( substr(check_number(substr($array[0], 0, 9)), -1) == substr($array[0], 9, 1) ) {
			$check['serial'] = true;
		}
		if( substr(check_number(substr($array[1], 0, 6)), -1) == substr($array[1], 6, 1) ) {
 			$check['birthday'][0] = true;
		}
		if( substr(check_number(substr($array[2], 0, 6)), -1) == substr($array[2], 6, 1) ) {
			$check['expiration'][0] = true;
		}
		if( time() < mktime(0, 0, 0, substr($array[2], 2, 2), substr($array[2], 4, 2), substr($array[2], 0, 2)) ) {
			$check['expiration'][1] = true;
		}
		if( substr(check_number(substr($array[0], 0, 10).substr($array[1], 0, 7).substr($array[2], 0, 7)), -1) == $array[3] ) {
			$check['all'] = true;
		}
		return ( $check['serial'] === true && $check['birthday'][0] === true && $check['expiration'][0] === true && $check['expiration'][1] === true && $check['all'] === true );
	}

	function age_check($age)
	{
		if( strlen($age) != 6 ) {
			return false;
		}
		$birth = array(substr($age, 0, 2), substr($age, 2, 2), substr($age, 4, 2));
		$date = array(date('y')-16, date('m'), date('d'));

		if( $date[0] < $birth[0] ) {
			return false;
		} elseif( $date[1] < $birth[1] ) {
			return false;
		} elseif( $date[2] < $birth[2] ) {
			return false;
		} else {
			return true;
		}
	}


	# Aufruf
	$sum = $_POST['serial'] . 'D ' . $_POST['birthday'] . ' ' . $_POST['expiration'] . ' ' . $_POST['all'];

	if( perso_check($sum) === true ) {
		echo 'Personalnummer korrekt.';
	} elseif( age_check($_POST['birthday']) === false ) {
		echo 'Du bist nicht alt genug!';
	} else {
		echo 'Personalnummer falsch!';
	}

?>
 
Also ich kann irgendwie die Werte nicht übermitteln.
Mit GET gehts aber eignetlich.
Ich hab die If-Frage am Ende geändert, aber jetzt sagt er mir nichtmal mehr das die Personummer richtig ist.

PHP:
 <?php 
	function check_number($number=0) 
	{ 
		$return = 0; 
		if( empty($number) || is_numeric($number) ) { 
			return false; 
		} 
		$p = 7; 
		for($i=0; $i<strlen(strval($number)); $i++) { 
			$return += substr($number[$i]*$p, -1); 
			if( $p == 1 ) { 
				$p = 7; 
			} elseif( $p == 3 ) { 
				$p = 1; 
			} elseif( $p == 7 ) { 
				$p = 3; 
			} 
		} 
		return $return; 
	} 
	function perso_check($id=0) 
	{ 
		$check = array( 
			'serial'		=> false, 
			'birthday'	  => false, 
			'expiration'	=> false, 
			'all'		   => false 
		); 
		$array = explode(' ', $id); 
		if( count($array) != 3 ) { 
			return false; 
		} 
		if( substr(check_number(substr($array[0], 0, 9)), -1) == substr($array[0], 9, 1) ) { 
			$check['serial'] = true; 
		} 
		if( substr(check_number(substr($array[1], 0, 6)), -1) == substr($array[1], 6, 1) ) { 
			 $check['birthday'][0] = true; 
		} 
		if( substr(check_number(substr($array[2], 0, 6)), -1) == substr($array[2], 6, 1) ) { 
			$check['expiration'][0] = true; 
		} 
		if( time() < mktime(0, 0, 0, substr($array[2], 2, 2), substr($array[2], 4, 2), substr($array[2], 0, 2)) ) { 
			$check['expiration'][1] = true; 
		} 
		if( substr(check_number(substr($array[0], 0, 10).substr($array[1], 0, 7).substr($array[2], 0, 7)), -1) == $array[3] ) { 
			$check['all'] = true; 
		} 
		return ( $check['serial'] === true && $check['birthday'][0] === true && $check['expiration'][0] === true && $check['expiration'][1] === true && $check['all'] === true ); 
	} 
	function age_check($age) 
	{ 
		if( strlen($age) != 6 ) { 
			return false; 
		} 
		$birth = array(substr($age, 0, 2), substr($age, 2, 2), substr($age, 4, 2)); 
		$date = array(date('y')-16, date('m'), date('d')); 
		if( $date[0] < $birth[0] ) { 
			return false; 
		} elseif( $date[1] < $birth[1] ) { 
			return false; 
		} elseif( $date[2] < $birth[2] ) { 
			return false; 
		} else { 
			return true; 
		} 
	} 

	# Aufruf 
	$sum = $_GET['serial'] . 'D ' . $_GET['birthday'] . ' ' . $_GET['expiration'] . ' ' . $_GET['all']; 
	if( perso_check($sum) === true ) { 
		echo 'Personalnummer korrekt.'; 
  if( age_check($_GET['birthday']) === false ) { 
		echo 'Du bist nicht alt genug!'; 
	}
	} else { 
		echo 'Personalnummer falsch!'; 
	} 
?>
 
ich habe/hatte mal gelesen das ein *persönalausweißnummercheck* gesetzlich nicht mehr erlaubt ist...

Nein, ich denke nicht das ein »persönalausweißnummercheck« verboten ist.
Allerdings sollte so eine Rechtschreibung verboten werden.
Mit Strafen bis zu 3 Jahren geahndet werden ...

»Wie lange is Papa noch weg?«
»Noch zweimal Singen und eine Deutsch-Prüfung ...«

oder Bambusschläge auf die Füße, bis man die unterschiede zwischen s, ss und ß kapiert hat :-) ;-]
 
Hallo!

Security hat gesagt.:
.....Mit GET gehts aber eignetlich.....
Irgendwie logisch, die Daten werden ja auch per GET übergeben..... und nicht per Post.
Meines Wissens nach kann man keine Daten per POST an ein externes Script übermitteln..... auch nicht mit method="POST" im Formular.
Binde den Code auf der Formularseite mit ein.
Das ganze in eine if/else-Anweisung um je nach Situation das eine oder andere auszugeben:
PHP:
<?php
if(isset($_POST['submit'])) {
	 // blende den Code ein
} else {
	 // blende das Formular ein
}
?>
Oder umgekehrt:
PHP:
<?php
if(!isset($_POST['submit'])) {
	 // blende das Formular ein
} else {
	 // blende den Code ein
}
?>
Gruss Dr Dau
 
Zurück