diff --git a/pkg/vin/vin_utils.go b/pkg/vin/vin_utils.go index e2395ca..e1a468b 100644 --- a/pkg/vin/vin_utils.go +++ b/pkg/vin/vin_utils.go @@ -47,6 +47,9 @@ func (v VIN) IsValidVIN() bool { if len(v) != 17 { return false } + if AreAllCharactersTheSameAlt(string(v)) { + return false + } // Check if the string matches the VIN pattern // Excluding I, O, Q as per standard @@ -55,6 +58,9 @@ func (v VIN) IsValidVIN() bool { } func (v VIN) IsValidJapanChassis() bool { + if AreAllCharactersTheSameAlt(string(v)) { + return false + } re := regexp.MustCompile(`(?)^[A-Z0-9]{2,7}-?\d{5,7}$`) return re.MatchString(string(v)) } @@ -122,3 +128,18 @@ func (v VIN) SerialNumber() string { } return string(v[11:17]) } + +// AreAllCharactersTheSameAlt check not getting bogus VIN +func AreAllCharactersTheSameAlt(s string) bool { + if len(s) <= 1 { + return true + } + + firstChar := rune(s[0]) + for _, char := range s[1:] { + if char != firstChar { + return false + } + } + return true +} diff --git a/pkg/vin/vin_utils_test.go b/pkg/vin/vin_utils_test.go index 5686eac..2a65229 100644 --- a/pkg/vin/vin_utils_test.go +++ b/pkg/vin/vin_utils_test.go @@ -177,6 +177,11 @@ func TestVIN_IsValidJapanChassis(t *testing.T) { v: "ZWR90-8000186", want: true, }, + { + name: "Invalid japan chassis number all the same", + v: "AAAAAAAAAAAAA", + want: false, + }, { name: "Japan chassis without dash", v: "DJLAS203662", @@ -187,6 +192,11 @@ func TestVIN_IsValidJapanChassis(t *testing.T) { v: "1FTFX1E57JKE37092", want: false, }, + { + name: "Invalid VIN with all chars the same", + v: "AAAAAAAAAAAAAAAAA", + want: false, + }, { name: "Short VIN without dash", v: "WBMWD",