时间:2021.09.01
环境:
目的:Go语言实现随机密码(字符串)
说明:
作者:Zhong QQ交流群:121160124 欢迎加入!
package main
import (
"fmt"
"math/rand"
"time"
"regexp"
"github.com/gookit/color"
)
// 指定要生成密码的长度
var code_len int = 20
func main() {
color.Secondary.Printf("\n%30s\n", "********************")
color.Secondary.Printf("%11s ", "*")
color.Style{color.FgCyan, color.OpBold}.Printf("%s", "随机密码生成器")
color.Secondary.Printf("%s\n", " *")
color.Secondary.Printf("%30s\n\n", "********************")
//创建随机数种子 以时间参数
rand.Seed(time.Now().UnixNano())
//输出10以内的正整数之中随机一个数 0-9
str_ls := perfect()
for i:=0;i<10;i++ {
generate_code(str_ls)
}
color.Info.Println("\n\nTips: 鼠标左键查看内容与锁定程序 右键复制内容与释放程序\n")
// 定时退出
n := 60
tick := time.Tick(1 * time.Second)
for exit_program := n; exit_program > 0; exit_program-- {
color.Red.Printf("\r%ds 后将自动退出程序 ... ", exit_program)
<-tick
}
}
// 密码元素
func perfect() []byte {
//生成包含数字、字母和特殊符号的一个字符串列表 可自定义字符组合 因为字母数量多 可以适当多加入数字和特殊字符 注意不能含有不符合密码规范的特殊字符
str_ls := []byte {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9',
'@','$','*','!','?','.','@','$','*','!','?','.'}
//去除易混淆的几个字符
del_ch := []byte {'0', '1', 'i', 'I', 'l', 'L', 'o', 'O'}
for j:=0;j<len(del_ch);j++ {
for k:=0;k<len(str_ls);k++ {
if del_ch[j] == str_ls[k] {
str_ls = append(str_ls[:k],str_ls[k+1:]...)
}
}
}
return str_ls
}
// 密码生成函数
func generate_code(str_ls []byte) string {
//字符列表 char_ls
char_ls := []byte {}
for i:=0;i<code_len;i++ {
index := rand.Intn(len(str_ls))
char := str_ls[index]
char_ls = append(char_ls, char)
}
str := string(char_ls)
//检测生成的密码是否是包含数字、字母、特殊符号的组合 如果不是那么重新生成
if !regexp.MustCompile(`[0-9]`).MatchString(str) || !regexp.MustCompile(`[A-Z]`).MatchString(str) ||
!regexp.MustCompile(`[a-z]`).MatchString(str) || !regexp.MustCompile(`[^a-zA-Z0-9]`).MatchString(str) {
return generate_code(str_ls)
} else {
fmt.Printf("系统随机生成的密码为:\t")
color.Style{color.OpBold, color.FgBlue}.Printf("%-20v\n", str)
return str
}
}
关注微信公众号 加入QQ交流群