package main import ( "fmt" "math" "regexp" "strings" "unicode/utf8" ) func passStrength(passWord string) string { hero := 0.0 size := float64(utf8.RuneCountInString(passWord)) freqMap := make(map[rune]float64) for _, char := range passWord { freqMap[char]++ } for _, v := range freqMap { p := v / size hero -= p * math.Log2(p) } strength := (hero / 3.2) * 100 if strength > 100 { strength = 100 } if len(passWord) < 8 { return "رمزعبور حداقل باید 8 کاراکتر باشد" } if !regexp.MustCompile(`[0-9]`).MatchString(passWord) { return "حداقل باید یک عدد داخل رمزعبور باشد" } if !regexp.MustCompile(`[A-Z]`).MatchString(passWord) { return "حداقل باید یک حرف انگلیسی بزرگ داخل رمزعبور باشد" } if !regexp.MustCompile(`[\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\>\=\?\@\[\]\{\}\^\_\\~\]\+\$]`).MatchString(passWord) { return "حداقل باید یک کاراکتر خاص داخل رمزعبور باشد" } return fmt.Sprintf("%.0f : قدرت رمزعبور", strength) } func main() { fmt.Println(passStrength("[es51tP}a*s1")) // 100 : قدرت رمزعبور fmt.Println(passStrength("pas_Test0")) // 92 : قدرت رمزعبور }