public PersonalDataBirthdayValidator()
        {
            this.CascadeMode = CascadeMode.StopOnFirstFailure;

            RuleFor(x => x.Birthday)
            .NotEmpty();

            RuleFor(x => x.Birthday)
            .SetValidator(new DateTimeValueValidator());

            RuleFor(x => x.BirthdayD)
            .LessThan(DateTime.Today)
            .Unless(x => string.IsNullOrEmpty(x.Birthday))
            .WithMessage(Validationmessages.BirthdayNotInFuture);

            RuleFor(x => x.BirthdayD)
            .GreaterThanOrEqualTo(new DateTime(1900, 01, 01))
            .Unless(x => string.IsNullOrEmpty(x.Birthday));

            RuleFor(x => x.BirthdayD)
            .Must(CheckDates)
            .Unless(x => string.IsNullOrEmpty(x.Birthday) || !SSNHelper.IsValid(x.Ssn))
            .WithSeverity(Severity.Warning)
            .WithMessage(x => Validationmessages.BirthdayNotInSsn(x));
        }
        public PersonalDataSsnValidator()
        {
            this.CascadeMode = CascadeMode.StopOnFirstFailure;

            RuleFor(x => x.Ssn)
            .NotEmpty();

            RuleFor(x => x.Ssn)
            .Must(x => SSNHelper.IsValid(x))
            .WithMessage(Validationmessages.SsnNotValid);
        }
        private bool CheckDates(PersonalData data, DateTime date)
        {
            if (date == null)
            {
                return(false);
            }

            var date2 = SSNHelper.GetBirthDay(data.Ssn);

            if (!date2.HasValue)
            {
                return(true);
            }

            return(date2.Value.ToString("ddMMyy") == date.ToString("ddMMyy"));
        }
 public static string BirthdayNotInSsn(PersonalData data) => $"Das Geburtsdatum {data.BirthdayD.ToString("dd.MM.yyyy")} unterscheidet sich vom Wert in der Versicherungsnummer {SSNHelper.Format(data.Ssn).Substring(5)}.";