konta-walutowe/src/main/java/eu/ztsh/wymiana/validation/AdultValidator.java

42 lines
1.4 KiB
Java

package eu.ztsh.wymiana.validation;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.Arrays;
import java.util.Objects;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
public class AdultValidator implements ConstraintValidator<Adult, String> {
private final Pattern pattern = Pattern.compile("\\d{11}");
private final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyyMMdd");
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (!pattern.matcher(value).matches()) {
return false;
}
var datePart = Arrays.stream(value.substring(0, 6).split("")).map(Integer::parseInt).toArray(Integer[]::new);
final String prefix;
if (datePart[2] > 1) {
datePart[2] = (datePart[2] - 2);
prefix = "20";
} else {
prefix = "19";
}
var dateStamp = prefix.concat(Arrays.stream(datePart).map(Objects::toString).collect(Collectors.joining()));
try {
return LocalDate.parse(dateStamp, dtf)
.plusYears(18)
.isBefore(LocalDate.now(context.getClockProvider().getClock()));
} catch (DateTimeParseException exception) {
return false;
}
}
}