Wczoraj poprawiałem walidację numeru PESEL w aktualnym projekcie. PESEL zawiera informacje o płci i dacie urodzenia osoby, do wyciągnięcia tych danych napisałem sobie taką klasę.
class Pesel
{
public static function extractSex($pesel)
{
return intval(substr($pesel, 9, 1)) % 2 == 0 ? 1 : 2;
}
public static function extractDate($pesel)
{
list($year, $month, $day) = sscanf($pesel, '%02s%02s%02s');
switch (substr($month, 0, 1)) {
case 2:
case 3:
$month -= 20;
$year += 2000;
break;
case 4:
case 5:
$month -= 40;
$year += 2100;
case 6:
case 7:
$month -= 60;
$year += 2200;
break;
case 8:
case 9:
$month -= 80;
$year += 1800;
break;
default:
$year += 1900;
break;
}
return checkdate($month, $day, $year)
? new \DateTime("$year/$month/$day")
: null;
}
}
Metoda extractSex() zwraca 1 jeśli numer PESEL należy do kobiety lub 2 jeśli do mężczyzny. Metoda extractDate() zwraca obiekt DateTime z datą urodzenia z PESEL-u.
W klasie brakuje walidacji poprawności PESEL-u, ale w moim projekcie załatwia to osobny walidator.
dzięki, przydało sie :)