package passwordvalidator import "strings" const ( replaceChars = `!@$&*` sepChars = `_-., ` otherSpecialChars = `"#%'()+/:;<=>?[\]^{|}~` lowerChars = `abcdefghijklmnopqrstuvwxyz` upperChars = `ABCDEFGHIJKLMNOPQRSTUVWXYZ` digitsChars = `0123456789` ) func getBase(password string) int { chars := map[rune]struct{}{} for _, c := range password { chars[c] = struct{}{} } hasReplace := false hasSep := false hasOtherSpecial := false hasLower := false hasUpper := false hasDigits := false base := 0 for c := range chars { if strings.ContainsRune(replaceChars, c) { hasReplace = true continue } if strings.ContainsRune(sepChars, c) { hasSep = true continue } if strings.ContainsRune(otherSpecialChars, c) { hasOtherSpecial = true continue } if strings.ContainsRune(lowerChars, c) { hasLower = true continue } if strings.ContainsRune(upperChars, c) { hasUpper = true continue } if strings.ContainsRune(digitsChars, c) { hasDigits = true continue } base++ } if hasReplace { base += len(replaceChars) } if hasSep { base += len(sepChars) } if hasOtherSpecial { base += len(otherSpecialChars) } if hasLower { base += len(lowerChars) } if hasUpper { base += len(upperChars) } if hasDigits { base += len(digitsChars) } return base }