package validation import ( "GoMembership/internal/models" "time" "github.com/go-playground/validator/v10" ) func validateDriverslicence(sl validator.StructLevel) { dl := sl.Current().Interface().(models.User).Licence // if !vValidateLicence(dl.Number) { if dl.Number == "" { sl.ReportError(dl.Number, "licence_number", "", "invalid", "") } if dl.IssuedDate.After(time.Now()) { sl.ReportError(dl.IssuedDate, "issued_date", "", "invalid", "") } if dl.ExpirationDate.Before(time.Now().AddDate(0, 0, 3)) { sl.ReportError(dl.ExpirationDate, "expiration_date", "", "too_soon", "") } } // seems like not every country has to have an licence id and it seems that germany changed their id generation type.. // func validateLicence(fieldValue string) bool { // if len(fieldValue) != 11 { // return false // } // id, tenthChar := string(fieldValue[:9]), string(fieldValue[9]) // if tenthChar == "X" { // tenthChar = "10" // } // tenthValue, _ := strconv.ParseInt(tenthChar, 10, 8) // // for readability // weights := []int{9, 8, 7, 6, 5, 4, 3, 2, 1} // sum := 0 // for i := 0; i < 9; i++ { // char := string(id[i]) // value, _ := strconv.ParseInt(char, 36, 64) // sum += int(value) * weights[i] // } // calcCheckDigit := sum % 11 // if calcCheckDigit != int(tenthValue) { // return false // } // return true // }