În dezvoltarea aplicațiilor web și a formularelor de înregistrare, verificarea vârstei este o cerință esențială pentru a asigura respectarea termenilor de utilizare sau a reglementărilor legale privind protecția minorilor (cum ar fi pragul minim de 18 ani pentru accesarea anumitor servicii).
Mai jos este prezentată o abordare completă pentru calcularea și validarea vârstei în PHP, plecând de la o logică procedurală simplă și ajungând la soluții moderne și sigure.
Parametrii de intrare și rezultatele funcției
Funcția utilizează următorii parametri de bază:
$dob– data nașterii primită sub formă de șir text în formatulzi/lună/an(de exemplu:"20/01/1990");$age(sau$minAge) – numărul minim de ani împliniți necesari pentru aprobarea utilizatorului;- Valoarea returnată – returnează
1(sautrue) dacă utilizatorul îndeplinește condiția de vârstă și2(saufalse) dacă vârsta minimă nu este atinsă.
Implementarea procedurală în PHP
Următoarea funcție analizează data nașterii, compară anul, luna și ziua cu data curentă a serverului și determină corect dacă aniversarea din anul curent a avut loc deja:
<?php
/**
* Verifică dacă un utilizator a împlinit o vârstă minimă.
*
* @param string $dob Data nașterii în format DD/MM/YYYY
* @param int $minAge Limita minimă de vârstă cerută
* @return int 1 dacă îndeplinește condiția, 2 dacă nu o îndeplinește
*/
function check_dob($dob, $minAge) {
$date = explode("/", $dob);
if (count($date) !== 3) {
return 2; // Format invalid
}
$day = (int)$date[0];
$month = (int)$date[1];
$year = (int)$date[2];
// Validare calendaristică nativă
if (!checkdate($month, $day, $year)) {
return 2;
}
$currentYear = (int)date("Y");
$currentMonth = (int)date("m");
$currentDay = (int)date("d");
$calculatedAge = $currentYear - $year;
// Scădem un an dacă ziua de naștere nu a sosit încă în anul curent
if ($currentMonth < $month || ($currentMonth === $month && $currentDay < $day)) {
$calculatedAge--;
}
if ($calculatedAge >= $minAge) {
return 1; // Condiție îndeplinită
} else {
return 2; // Vârstă insuficientă
}
}
?>
Abordarea modernă recomandată: clasa DateTime (PHP 5.3+)
În proiectele PHP moderne, utilizarea clasei native DateTime și a metodei diff() simplifică semnificativ logica și gestionează automat anii bisecți:
<?php
/**
* Verificare robustă a vârstei folosind DateTime.
*
* @param string $dobString Data în format d/m/Y
* @param int $minAge Vârsta minimă
* @return bool True dacă utilizatorul este eligibil
*/
function isValidAge($dobString, $minAge) {
$birthDate = DateTime::createFromFormat("d/m/Y", trim($dobString));
if (!$birthDate) {
return false;
}
// Resetăm componenta orară pentru comparare strictă pe zile
$birthDate->setTime(0, 0, 0);
$today = new DateTime("today");
// Prevenim date de naștere din viitor
if ($birthDate > $today) {
return false;
}
$interval = $birthDate->diff($today);
return $interval->y >= $minAge;
}
?>
Bune practici pentru securitate și validarea formularelor
La integrarea verificării de vârstă în fluxurile de înregistrare, țineți cont de următoarele principii:
- Validarea pe server este obligatorie: validările realizate exclusiv în JavaScript pe partea de client pot fi ușor ocolite sau dezactivate;
- Folosiți
checkdate(): asigurați-vă că datele precum „31/02/1995” sunt respinse imediat ca nevalide; - Sanitizarea datelor de intrare: curățați variabilele primite prin
$_POSTpentru a preveni atacurile de tip Cross-Site Scripting (XSS); - Configurarea corectă a fusului orar: apelați
date_default_timezone_set()în fișierul de configurare pentru a preveni discrepanțele la trecerea dintre zile.