密码验证合格程序

密码要求:

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
}

 

posted @ 2023-02-24 23:26  $wanggang  阅读(26)  评论(0编辑  收藏  举报