AW: 1 - Altersbeschränkung einbauen
Hab mal eine kleine Funktion gebaut, die dir ziemlich helfen wird.
Diese prüft folgenden Part des Personalausweises (neu und alt) auf gültigkeit und darauf, ob die person 18 ist.
http://i86.img-up.net/welchenumm444d.png
Bitteschön:
Code:
function checkAge($personum) {
$sum = 0;
for($i = 0;$i < 6;$i++) {
$sum += (intval(substr($personum,$i,1)) * intval(substr("731731",$i,1)));
}
if(intval(substr($personum,6,1)) == intval(substr((string)$sum,-1))) {
$age = intval((time() - mktime(0, 0, 0, intval(substr($personum,2,2)), intval(substr($personum,4,2)), intval(substr($personum,0,2)))) / 31536000);
return($age >= 18);
}else{
return(false);
}
}
checkAge("6408125");
Viel Spaß damit.
PS: Ich werde den Code später hier wieder entfernen, um hackern und fakern weniger material zu liefern, diese funktion zu umgehen :)
Ich könnte das gesamte System auch noch weiterschreiben zum validieren des gesamten Personalausweises. Aber das würd ich dann wohl nur gegen Bezahlung machen. Ist nämlich dann ne ganz schöne Rechenaufgabe. :)
AW: 1 - Altersbeschränkung einbauen
Hi NeoGriever,
in welchen Bereich muss ich das einbauen?
Ich würde das eher für den Internen Bereich nehmen, unter Profil verifizieren.
Möchte das in zwei Teile auf teilen.
1. Alter
2. Adresse
Zum Anmelden, reicht eine normale Abfrage des Alters. :)
Erst wenn ein Mitglied dann eine Auszahlung beantragen will, muss das Mitglied dann seine Daten verifizieren.
Und da wäre der Code nicht schlecht :)
Aber das ist erstmal nach hinten gestellt... kann man später immer noch dazu bauen.
Aktuell will ich nur eine normale Eintragung des Alters mit 18+ Prüfung.
Und da brauche ich eben noch Hilfe. (Siehe letzter Beitrag von mir)
AW: 1 - Altersbeschränkung einbauen
Zuerst solltest du in der /content/intern/anmelden.php nach dem Part suchen, wo alles eingespeichert wird.
Dort fügst du das dazuspeichern des Geburtsdatums hinzu. Datenbank-Tabelle anpassen nicht vergessen.
Etwas weiter unten kannst du das Eingabefeld für das Geburtsdatum mit einbauen. Dürfte leicht ersichtlich sein, wo es hin kann.
Achte darauf, dass du die POST-Daten oben auch korrekt abfängst.
Nun kannst du mit folgender Codezeile das Alter des Benutzers berechnen:
Code:
$tag = $_POST["tag"];
$monat = $_POST["monat"];
$jahr = $_POST["jahr"];
$age = intval((time() - mktime(0, 0, 0, intval($monat), intval($jahr), intval($tag))) / 31536000);
Damit prüfst du dann mittels if($age >= 18), ob er genau 18 oder älter ist.
Ist dies der Fall, die Daten in die Datenbank übertragen. Andernfalls einen Fehler ausgeben. Fertig.
AW: 1 - Altersbeschränkung einbauen
Zitat:
Zitat von
NeoGriever
...
Code:
...;
$age = intval((time() - mktime(0, 0, 0, intval($monat), intval($jahr), intval($tag))) / 31536000);
...
Nicht jedes Jahr hat 365 Tage! Insofern wird das Alter so nicht ganz korrekt sein.
@chackie: hab Beitrag #8 editiert, sollte jetzt deutlicher sein, was wo hingehört.
AW: 1 - Altersbeschränkung einbauen
Das Schaltjahr hat erst dann eine gravierende Auswirkung, wenn man wirklich genau innerhalb dieser 5-Tage-Verschiebung ohne das Schaltjahr geboren wurde. Rechne dir mal aus, wann man geboren sein muss, um heute obwohl man 18 ist mit dieser funktion als 17 eingestuft zu werden ...
Man kann natürlich anstelle von 365 tagen als zeiteinteilung einfach 365.25 tage festlegen.
AW: 1 - Altersbeschränkung einbauen
Vielen dank an jpwfour,
deine Anleitung hat super geklappt!
Funktioniert ohne Probleme.
@NeuGriever ebenfalls vielen dank! :)
AW: 1 - Altersbeschränkung einbauen
Zitat:
Zitat von
neogriever
das schaltjahr hat erst dann eine gravierende auswirkung, wenn man wirklich genau innerhalb dieser 5-tage-verschiebung ohne das schaltjahr geboren wurde....
Man kann natürlich anstelle von 365 tagen als zeiteinteilung einfach 365.25 tage festlegen.
hä? Nö.....
AW: 1 - Altersbeschränkung einbauen
Äh. Doch!
365 + 365 + 365 + 365 = 0 Tage Unterschied
365 + 365 + 365 + 366 = 1 Tag Unterschied
Wenn man 18 oder älter sein muss, durchlebte man mindestens 4 Schaltjahre. Bei 4 Schaltjahren, die nicht mitgerechnet wurden, würde das heißen, dass man genau 4 Tage jünger berechnet wird. Somit ist es nur für Leute relevant, welche innerhalb eines 4-Tages-Zeitraums geboren wurden, welche dann genau auf diesen Punkt beruhen.
Behoben werden kann es, wenn man einfach anstelle von 365 Tagen pro Jahr, 365,25 Tage pro Jahr rechnet. Was dazu führt, dass jedes 4te Jahr als Schaltjahr zählt. Fehlerquote dann nur noch bei grob 0.075%. Natürlich kann man auch eine Schleife durchballern lassen, die das haargenau nachberechnet. Dann läge die Fehlerquote genau bei 0%.
Oder fehlt da irgendwas an meiner Berechnung?
AW: 1 - Altersbeschränkung einbauen
Zitat:
Zitat von
NeoGriever
... Somit ist es nur für Leute relevant, welche innerhalb eines 4-Tages-Zeitraums geboren wurden, welche dann genau auf diesen Punkt beruhen.
...
Relevant ist der Fehler für alle unter 18, 4-5 Tage vor Ihrem 18. Geburtstag.
Es wird ja jeder User, welcher grade an dem 18. Lebensjahr "kratzt", 4-5 Tage zu alt eingestuft.
Der Fehler ist natürlich gering, aber eine korrekte Abfrage ob das Geburtsdatum des Users mehr oder weniger als 18 Jahre in der Vergangenheit liegt ist ja möglich.
Deine Funktion ist natürlich trotzdem eine gute Idee.
AW: 1 - Altersbeschränkung einbauen
Für nen Free-Script akzeptabel :)
Dazu kommt noch, dass ich das Script ja mal so nebenbei gebastelt habe. Man kann natürlich vom geburtsdatum aus bis zum heutigen zeitpunkt die schaltjahre berechnen und jeweils 1 tag pro schaltjahr in die teilung hinzufügen. Wäre wohl die effektivere möglichkeit.