72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package validator
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/go-playground/validator/v10"
|
|
"github.com/pkg/errors"
|
|
"fiskerinc.com/modules/vindecoder"
|
|
)
|
|
|
|
func validateVIN(fl validator.FieldLevel) bool {
|
|
ok := ValidateVINSimple(fl.Field().String())
|
|
|
|
return ok
|
|
}
|
|
|
|
func validateVINs(fl validator.FieldLevel) bool {
|
|
vins := strings.Split(fl.Field().String(), ",")
|
|
|
|
for _, vin := range vins {
|
|
ok := vindecoder.ValidateVINSimple(vin)
|
|
if !ok {
|
|
return false
|
|
}
|
|
|
|
ok = vindecoder.VerifyVinCheckDigit(vin)
|
|
if !ok {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func validateVINSuffix(fl validator.FieldLevel) bool {
|
|
ok, err := ValidateVINSuffixSimple(fl.Field().String())
|
|
|
|
return ok && err == nil
|
|
}
|
|
|
|
func ValidateVINSuffixSimple(vin string) (bool, error) {
|
|
matched, err := regexp.Match(`^[a-hj-npr-zA-HJ-NPR-Z0-9]{7}$`, []byte(vin))
|
|
if err != nil {
|
|
return matched, errors.WithStack(err)
|
|
}
|
|
return matched, nil
|
|
}
|
|
|
|
func validateICCID(fl validator.FieldLevel) bool {
|
|
ok, err := ValidateICCIDSimple(fl.Field().String())
|
|
|
|
return ok && err == nil
|
|
}
|
|
|
|
func ValidateICCIDSimple(iccid string) (bool, error) {
|
|
matched, err := regexp.Match(`^[0-9]{5,50}F{0,1}$`, []byte(iccid))
|
|
if err != nil {
|
|
return matched, errors.Wrapf(err, "")
|
|
}
|
|
|
|
return matched, nil
|
|
}
|
|
|
|
func validateVinCheckDigit(fl validator.FieldLevel) bool {
|
|
var vin = fl.Field().String()
|
|
return vindecoder.VerifyVinCheckDigit(vin)
|
|
}
|
|
|
|
func ValidateVINSimple(vin string) (valid bool) {
|
|
return vindecoder.ValidateVINSimple(vin)
|
|
} |