Andavos
Administrator
Foren-Gott
Dabei seit: 30.11.2003
Herkunft:
Posts: 6298
Mit dieser Funktion kann man überprüfen, ob ein Personalausweis gültig ist, und die enthalten Daten extrahieren.
Manche Seiten müssen die Personalausweisnummer von dem Person überprüfen, ob dieser z.B. schon Volljährig ist o.ä.
Hierfür kann man diesen kleinen Script benutzen. Zuerst wird überprüft, ob der Personalausweis noch gültig ist, danach werden die enthaltenen Daten extrahiert. Dazu gehören Geburtsdatum, Ablaufdatum, Staatsangehörigkeit, Kennziffer des Wohnsitzes etc.
PHP
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
<?php
//Pruefnummer ueberpruefen
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 ;
else if( $p == 3 )
$p = 1 ;
else if( $p == 7 )
$p = 3 ;
}
return $return ;
}
//Ist der Perso gueltig?
function perso_check ( $id )
{
$array = explode ( " " , $id );
//Erste Checknummer: Zählnummer & Erstwohnsitz
if(! ( substr ( check_number ( substr ( $array [ 0 ], 0 , 9 )), - 1 )== substr ( $array [ 0 ], 9 , 1 )))
return false ;
//Zweite Checknummer: Geburtstag
if(! ( substr ( check_number ( substr ( $array [ 1 ], 0 , 6 )), - 1 )== substr ( $array [ 1 ], 6 , 1 )))
return false ;
//Dritte Checknummer: Gueltig bis
if(! ( substr ( check_number ( substr ( $array [ 2 ], 0 , 6 )), - 1 )== substr ( $array [ 2 ], 6 , 1 )))
return false ;
//Ausweis abgelaufen? Wenn gewuenscht deaktivieren?
if(! ( time () < mktime ( 0 , 0 , 0 , substr ( $array [ 2 ], 2 , 2 ) , substr ( $array [ 2 ], 4 , 2 ) , substr ( $array [ 2 ], 0 , 2 ))))
return false ;
//Vierte Checknummer: Die gesamte Perso-ID
if(! ( substr ( check_number ( substr ( $array [ 0 ], 0 , 10 ). substr ( $array [ 1 ], 0 , 7 ). substr ( $array [ 2 ], 0 , 7 )), - 1 )== $array [ 3 ]))
return false ;
return true ;
}
//Informationen aus dem Perso beziehen
function perso_info ( $id )
{
$array = explode ( " " , $id );
//$return: Ein Objekt mit den Daten aus der Ausweisnummer
$return -> geb -> tag = $array [ 1 ]{ 4 } . $array [ 1 ]{ 5 }; //Geburtstag
$return -> geb -> monat = $array [ 1 ]{ 2 } . $array [ 1 ]{ 3 }; //Geburtsmonat
$return -> geb -> jahr = "19" . $array [ 1 ]{ 0 } . $array [ 1 ]{ 1 }; //Geburtsjahr
$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 -> tag = $array [ 2 ]{ 4 } . $array [ 2 ]{ 5 }; //Ausweiß Ablauf Tag
$return -> ablauf -> monat = $array [ 2 ]{ 2 } . $array [ 2 ]{ 3 }; //Ausweiß Ablauf Monat
$return -> ablauf -> jahr = $array [ 2 ]{ 0 } . $array [ 2 ]{ 1 }; //Ausweiß Ablauf Jahr
$return -> herkunft = $array [ 0 ]{ 10 };
//Ein Deutscher?
if( strtolower ( $return -> herkunft ) == "d" )
$return -> deutscher = true ;
else
$return -> deutscher = false ;
//Erstwohnsitz als Nummer
$return -> erstwohnsitz = $array [ 0 ]{ 0 }. $array [ 0 ]{ 1 }. $array [ 0 ]{ 2 }. $array [ 0 ]{ 3 };
return $return ;
}
//Beispiel zur Verwendung
if( $_GET [ 'check' ])
{
$perso_id = $_POST [ 'ida' ]. " " . $_POST [ 'idb' ]. " " . $_POST [ 'idc' ]. " " . $_POST [ 'idd' ];
//Oder:
//$perso_id = "1234567891D 2345678 9012345 6"
if( perso_check ( $perso_id ))
{
echo "Personalnummer korrekt!" ;
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 "Personalnummer falsch" ;
}
}
?>
<!-- Kleines Anwendungsbeispiel -->
Personalnummer:<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="überprüfen">
<br><br>
An die Funktion perso_check übergibt man die ID des Personalausweises.
Diese überprüft, ob der Personalausweis gültig ist. Es wird auch überprüft, ob der Personalausweis auch noch gültig ist.
Die Funktion perso_info extrahiert die enthaltenen Daten aus der Personalausweisnummer, z.B. Geburtsdatum, Ablaufdatum, Kennzahl des Wohnortes, Staatsangehörigkeit etc.
Wer es mal testen möchte:
http://www.php-einfach.de/perso_check.php
www.php-einfach.de , PHP lernen leicht gemacht
www.webhosterwissen.de , Webhosting-Vergleich
Post wurde schon 1x editiert, das letzte mal am 21.04.2006 um 16:21 von Andavos
03.02.2006, 21:14
Profil |
PM |
E-Mail
Gast
Hallo,
habe den Codeschnipsel etwas überarbeitet. Nun wird z.Bsp. auch das Gültigkeits- und Geburtsdatum überprüft, ob diese überhaupt reelle Daten sind (es kann also keiner am 30.02.1980 Geburtstag haben, wegen Februar und so.. )
Des weiteren wird das Alter errechnet und bei unter 18-jährigen rot markiert.
Im Codeschnipsel wird die Nummer von abgelaufenen Ausweisen als ungültig ausgegeben. Nun wird dieser Umstand einfach nur rot angezeigt.
----------------------------------------------
Beispiel:
1234123457D<<8004129<1112016<<<<<<<6
Ausgabe:
----------------------------------------------
Personalausweisnummer korrekt!
Daten der Ausweisnummer:
Geboren am: 12.04.1980 (Alter: 29 )
Der Ausweis ist noch gültig bis: 01.12.2011
Kennzahl Erstwohnsitz: 1234 (siehe hier )
Personenkennzahl: 12345
----------------------------------------------
Zum testen hier klicken:
http://molch-entertainment.de/perso.php
PHP
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
<html><head>
<title>Personalausweis/Reisepassnummer überprüfen</title>
<style type="text/css">
a {font-weight: bold;}
a:hover {text-decoration: none;}
</style>
<script language="javascript">
function weiter1() {
if (document.form1.ida.value.length == 10) {
document.form1.idb.focus(); }
}
function weiter2() {
if (document.form1.idb.value.length == 7) {
document.form1.idc.focus(); }
}
function weiter3() {
if (document.form1.idc.value.length == 7) {
document.form1.idd.focus(); }
}
function weiter4() {
if (document.form1.idd.value.length == 1) {
document.form1.button.focus(); }
}
</script>
</head><body text="#212121" link="#212121" vlink="#212121" alink="#212121" onload="document.form1.ida.focus();"><font face="verdana" size="2">
<?php
##################################
//Ab hier nichts mehr ändern, wenn man keine Ahnung hat !
//© 2008 by Molch-Entertainment - www.Molch-Entertainment.de | Codet by Sebastian Hollstein
//Der ©-Hinweis darf nicht entfernt werden !
//Code teilweise von http://www.php-einfach.de
//Pruefnummer ueberpruefen
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 ;
else if( $p == 3 )
$p = 1 ;
else if( $p == 7 )
$p = 3 ;
}
return $return ;
}
//Informationen aus dem Perso beziehen
function perso_info ( $id )
{
$array = explode ( " " , $id );
//$return: Ein Objekt mit den Daten aus der Ausweisnummer
$return -> geb -> tag = $array [ 1 ]{ 4 } . $array [ 1 ]{ 5 }; //Geburtstag
$return -> geb -> monat = $array [ 1 ]{ 2 } . $array [ 1 ]{ 3 }; //Geburtsmonat
$return -> geb -> jahr = "19" . $array [ 1 ]{ 0 } . $array [ 1 ]{ 1 }; //Geburtsjahr
$return -> geb -> jahr2 = $array [ 1 ]{ 0 } . $array [ 1 ]{ 1 }; //Geburtsjahr 2-stellig
$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 -> tag = $array [ 2 ]{ 4 } . $array [ 2 ]{ 5 }; //Ausweiß Ablauf Tag
$return -> ablauf -> monat = $array [ 2 ]{ 2 } . $array [ 2 ]{ 3 }; //Ausweiß Ablauf Monat
$return -> ablauf -> jahr = $array [ 2 ]{ 0 } . $array [ 2 ]{ 1 }; //Ausweiß Ablauf Jahr
$return -> ablauf -> jahr2 = $array [ 2 ]{ 0 } . $array [ 2 ]{ 1 }; //Ausweiß Ablauf Jahr 2-stellig
//Erstwohnsitz als Nummer
$return -> erstwohnsitz = $array [ 0 ]{ 0 }. $array [ 0 ]{ 1 }. $array [ 0 ]{ 2 }. $array [ 0 ]{ 3 };
$return -> pernr = $array [ 0 ]{ 4 }. $array [ 0 ]{ 5 }. $array [ 0 ]{ 6 }. $array [ 0 ]{ 7 }. $array [ 0 ]{ 8 };
return $return ;
}
$err1 = 0 ;
$err2 = 0 ;
$err3 = 0 ;
$err4 = 0 ;
$fehler = "" ;
$perso_id = $_GET [ 'ida' ]. " " . $_GET [ 'idb' ]. " " . $_GET [ 'idc' ]. " " . $_GET [ 'idd' ];
if ( strlen ( $perso_id ) != 28 and strlen ( $perso_id ) != 3 )
{
echo '<font color="red"><b>Bitte alle Felder vollständig ausfüllen!</b></font><br><br>' ;
}
else
{
$array = explode ( " " , $perso_id );
//Erste Checknummer: Zählnummer & Erstwohnsitz
if(! ( substr ( check_number ( substr ( $array [ 0 ], 0 , 9 )), - 1 )== substr ( $array [ 0 ], 9 , 1 )))
{
$err1 = 1 ;
$fehler = $fehler . '<font color="red">Fehler: Die Prüfsumme der Behördenkennzahl + Ausweisnummer stimmt nicht!</font><br>' ;
}
//ist es ein reelles Datum ?
if(! checkdate ( substr ( $array [ 1 ], 2 , 2 ), substr ( $array [ 1 ], 4 , 2 ), substr ( $array [ 1 ], 0 , 2 )))
{
$err2 = 1 ;
$fehler = $fehler . '<font color="red">Fehler: Das Geburtsdatum ist kein reelles Datum!</font><br>' ;
}
//Zweite Checknummer: Geburtstag
if(! ( substr ( check_number ( substr ( $array [ 1 ], 0 , 6 )), - 1 )== substr ( $array [ 1 ], 6 , 1 )))
{
$err2 = 1 ;
$fehler = $fehler . '<font color="red">Fehler: Die Prüfsumme des Geburtsdatums stimmt nicht!</font><br>' ;
}
//ist es ein reelles Datum ?
if(! checkdate ( substr ( $array [ 2 ], 2 , 2 ), substr ( $array [ 2 ], 4 , 2 ), substr ( $array [ 2 ], 0 , 2 )))
{
$err3 = 1 ;
$fehler = $fehler . '<font color="red">Fehler: Das Ablaufdatum ist kein reelles Datum!</font><br>' ;
}
//Dritte Checknummer: Gueltig bis
if(! ( substr ( check_number ( substr ( $array [ 2 ], 0 , 6 )), - 1 )== substr ( $array [ 2 ], 6 , 1 )))
{
$err3 = 1 ;
$fehler = $fehler . '<font color="red">Fehler: Die Prüfsumme des Ablaufdatums stimmt nicht!</font><br>' ;
}
//Vierte Checknummer: Die gesamte Perso-ID
if(! ( substr ( check_number ( substr ( $array [ 0 ], 0 , 10 ). substr ( $array [ 1 ], 0 , 7 ). substr ( $array [ 2 ], 0 , 7 )), - 1 )== $array [ 3 ]))
{
$err4 = 1 ;
$fehler = $fehler . '<font color="red">Fehler: Die Gesamtprüfsumme stimmt nicht!</font><br>' ;
}
if( $fehler == "" )
{
echo '<font color="green"><b>Personalausweisnummer korrekt!</b></font><br>' ;
echo "<br>Daten der Ausweisnummer:<br><br>" ;
$data = perso_info ( $perso_id );
echo '<b>Geboren am:</b> ' ; print_r ( $data -> geb -> tag ); echo '.' ; print_r ( $data -> geb -> monat ); echo '.' ; print_r ( $data -> geb -> jahr );
if ( $data -> volljaehrig )
{
echo ' (<b>Alter:</b> <font color="green">' ; print_r ( $data -> alter ); echo '</font>)<br>' ;
} else {
echo ' (<b>Alter:</b> <font color="red">' ; print_r ( $data -> alter ); echo ' - Minderjährig!</font>)<br>' ;
}
//Ausweis abgelaufen?
if(! ( time () < mktime ( 0 , 0 , 0 , substr ( $array [ 2 ], 2 , 2 ) , substr ( $array [ 2 ], 4 , 2 ) , substr ( $array [ 2 ], 0 , 2 ))))
{
echo '<br><font color="red">Der Ausweis ist abgelaufen am: <b>' . substr ( $array [ 2 ], 4 , 2 ). '.' . substr ( $array [ 2 ], 2 , 2 ). '.' . substr ( $array [ 2 ], 0 , 2 ). '</b>!</font><br>' ;
}
else
{
echo '<br><font color="green">Der Ausweis ist noch gültig bis: <b>' ; print_r ( $data -> ablauf -> tag ); echo '.' ; print_r ( $data -> ablauf -> monat ); echo '.20' ; print_r ( $data -> ablauf -> jahr ); echo '</font></b><br>' ;
}
echo '<br><b>Kennzahl Erstwohnsitz:</b> ' ; print_r ( $data -> erstwohnsitz ); echo ' (siehe <a href="http://www.pruefziffernberechnung.de/Begleitdokumente/BKZ.shtml" target="_blank">hier</a>)' ;
echo '<br><b>Personenkennzahl:</b> ' ; print_r ( $data -> pernr ); echo '<br><br>Prüfen Sie nun, ob die hier angezeigten Daten<br>mit dem Dokument und der Person übereinstimmen.<br><br>' ;
}
elseif ( $fehler != "" and strlen ( $perso_id ) != 3 )
{
echo '<font color="red"><b>Personalausweisnummer ungültig!</b></font><br><br>' ;
echo $fehler . '<br>' ;
}
else
{
$err1 = 0 ;
$err2 = 0 ;
$err3 = 0 ;
$err4 = 0 ;
}
}
?>
<b>Personalausweisnummer prüfen:</b><br><br>
<form name="form1" action="perso.php" method="get">
<table border="0"><tr><td>
<input type="text" size="10" maxlength="10" name="ida" tabindex="1" value="<?php echo $_GET [ 'ida' ]; ?> " onkeyup="weiter1();" style="border:1px solid #888888;<?php if( $err1 != 0 ) {echo ' background-color:#ff6b6b;' ;}; ?> "><font face="verdana" size="2">D<<</font></td><td>
<input type="text" size="7" maxlength="7" name="idb" tabindex="2" value="<?php echo $_GET [ 'idb' ]; ?> " onkeyup="weiter2();" style="border:1px solid #888888;<?php if( $err2 != 0 ) {echo ' background-color:#ff6b6b;' ;}; ?> "><font face="verdana" size="2"><</font></td><td>
<input type="text" size="7" maxlength="7" name="idc" tabindex="3" value="<?php echo $_GET [ 'idc' ]; ?> " onkeyup="weiter3();" style="border:1px solid #888888;<?php if( $err3 != 0 ) {echo ' background-color:#ff6b6b;' ;}; ?> "><font face="verdana" size="2"><<<<<</font></td><td>
<input type="text" size="1" maxlength="1" name="idd" tabindex="4" value="<?php echo $_GET [ 'idd' ]; ?> " onkeyup="weiter4();" style="border:1px solid #888888;<?php if( $err4 != 0 ) {echo ' background-color:#ff6b6b;' ;}; ?> "></td>
<td><input type="submit" tabindex="5" id="button" value="überprüfen" style="background-color:#eeeeee; border:1px solid #dddddd;"></td></tr></table></form>
<font size="1">(Es werden keine Daten gespeichert)</font>
</font></body></html>
Viel Spaß
17.05.2009, 13:04
Gast
und wie bekomm ich das mit in die register.php?
05.10.2010, 19:37
Gast
Wie schaut es mit den neuen Ausweisen aus? Wirst du dir da auch die Mühe machen?
Grüße
Dennis
30.05.2011, 13:38