+ my ($bd_ok, $bd_yr, $bd_mo, $bd_day);
+
+ if ($query->param('birthdate') =~ /^([1-9][0-9]{3})([01][0-9])([0-3][0-9])$/) {
+ $bd_yr = $1; $bd_mo = $2; $bd_day = $3;
+ if ($bd_yr > 1850 and $bd_mo > 0 and $bd_mo <= 12 and $bd_day > 0) {
+ if ($bd_mo == 2) {
+ if ($bd_day == 29 and ($bd_yr % 4 == 0 && ($bd_yr % 100 != 0 || $bd_yr % 400 == 0))) {
+ $bd_ok = 1;
+ } elsif ($bd_day <= 28) {
+ $bd_ok = 1;
+ }
+ } elsif ($bd_mo == 4 or $bd_mo == 6 or $bd_mo == 9 or $bd_mo == 11) {
+ if ($bd_day <= 30) {
+ $bd_ok = 1;
+ }
+ } else {
+ if ($bd_day <= 31) {
+ $bd_ok = 1;
+ }
+ }
+ }
+ } elsif (not defined($query->param('birthdate')) or $query->param('birthdate') =~ /^\s*$/) {
+ $bd_ok = 1;
+ }