Programare PHP: funcție completă pentru validarea și calcularea vârstei utilizatorilor

Î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 formatul zi/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 (sau true) dacă utilizatorul îndeplinește condiția de vârstă și 2 (sau false) 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 $_POST pentru 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.

Lasă un comentariu