39 lines
695 B
Go
39 lines
695 B
Go
package validation
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
func ValidateLicence(fl validator.FieldLevel) bool {
|
|
fieldValue := fl.Field().String()
|
|
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
|
|
}
|