密码验证合格程序
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
输入描述:
一组字符串。
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入:
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出:
OK NG NG OK
package main import ( "bufio" "fmt" "os" "strings" "unicode" ) func main() { input := bufio.NewScanner(os.Stdin) for input.Scan() { if CheckPassword(input.Text()) { fmt.Println("OK") }else{ fmt.Println("NG") } } } func CheckPassword(password string) bool { length := len(password) if length <= 8 { return false } hasLower, hasUpper, hasDigit, hasSpecial := 0, 0, 0, 0 for _, v := range password { if unicode.IsLower(v) { hasLower = 1 } else if unicode.IsUpper(v) { hasUpper = 1 } else if unicode.IsDigit(v) { hasDigit = 1 } else if strings.ContainsRune("!@#$%^&*()-+", v) { hasSpecial = 1 } } if hasLower+hasUpper+hasDigit+hasSpecial < 3 { return false } map1 := make(map[string]bool) for i := 0; i < length-2; i++ { if _, ok := map1[password[i:i+3]]; !ok { map1[password[i:i+3]] = true } else { return false } } return true }