代码拉取完成,页面将自动刷新
package random
import (
"fmt"
"os"
"time"
"gitee.com/duqingbing/go-utils/utils"
)
// 获取随机字符串
// 可通过掩码选中字符串, mask 7 => 1,2,4, mask 3 => 1,2, mask 5 => 1, 4
func RandString(length uint8, mask uint8) (str string) {
lib := map[uint8][]rune{
1: []rune("0123456789"),
2: []rune("abcdedghijklmnopqrstuvwxyz"),
4: []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),
8: []rune("-=$"),
16: []rune("0123456789ABCDEF"),
}
letters := []rune{}
for ki, cs := range lib {
mk := mask & ki
if ki == mk {
letters = append(letters, cs...)
}
}
letterLen := len(letters)
if 0 == letterLen {
return
}
bs := make([]rune, length)
for i := 0; i < int(length); i++ {
bs[i] = letters[Random.Int(letterLen)]
}
return string(bs)
}
// 根据 当前时间+服务IP+当前进程ID 计算一个唯一 id
func Uniqid() string {
// 时间计算
now := fmt.Sprintf("%X", time.Now().UnixNano())
// 服务器端 ip 计算
var ip string = ""
if longIp, err := utils.IPString2Long(utils.ServerIp()); err == nil {
ip = fmt.Sprintf("%X", longIp)
} else if hostname, err := os.Hostname(); err == nil {
ip = utils.StringToHex(hostname) // 找不到 IP 用主机名代替
}
// 当前 进程ID 计算
pid := fmt.Sprintf("%X", os.Getpid())
unq := now + ip + pid
length := len(unq)
if length >= 32 {
return unq[length-32:]
}
return unq + RandString(uint8(32-length), 16)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。