70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
|
package utils
|
||
|
|
||
|
import (
|
||
|
"crypto/md5"
|
||
|
"encoding/hex"
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func GenUid() uint32 {
|
||
|
code := []string{"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"}
|
||
|
index := RandomNum(0, 25)
|
||
|
_, m, d := time.Now().Date()
|
||
|
month := int(m)
|
||
|
var monthStr string
|
||
|
if month >= 10 {
|
||
|
monthStr = SwitchMonthToHex(month)
|
||
|
} else {
|
||
|
monthStr = strconv.Itoa(month)
|
||
|
}
|
||
|
timeStr := []rune(strconv.Itoa(int(time.Now().Unix())))
|
||
|
timeUnixStr := []rune(strconv.Itoa(int(time.Now().UnixNano())))
|
||
|
randStr := fmt.Sprintf("%s%s%02d%s%s%02d", code[index], monthStr, d, string(timeStr[len(timeStr)-5:]),
|
||
|
string(timeUnixStr[2:7]), RandomNum(0, 99))
|
||
|
md := md5.New()
|
||
|
md.Write([]byte(randStr))
|
||
|
a := []rune(hex.EncodeToString(md.Sum(nil)))
|
||
|
s := []rune("0123456789012345678901234567890123456789")
|
||
|
var h string
|
||
|
for f := 0; f < 8; f++ {
|
||
|
a := ((a[f] ^ a[f+8]) - a[f]) & 0x1F
|
||
|
h += string(s[a])
|
||
|
}
|
||
|
id, _ := strconv.Atoi(h)
|
||
|
return uint32(id)
|
||
|
}
|
||
|
|
||
|
func SwitchMonthToHex(month int) string {
|
||
|
switch month {
|
||
|
case 10:
|
||
|
return "A"
|
||
|
case 11:
|
||
|
return "B"
|
||
|
case 12:
|
||
|
return "C"
|
||
|
default:
|
||
|
return "D"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//$code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||
|
// $rand = $code[rand(0, 25)]
|
||
|
// . strtoupper(dechex(date('m')))
|
||
|
// . date('d') . substr(time(), -5)
|
||
|
// . substr(microtime(), 2, 5)
|
||
|
// . sprintf('%02d', rand(0, 99));
|
||
|
// for (
|
||
|
// $a = md5($rand, true),
|
||
|
// $s = '0123456789012345678901234567890123456789',
|
||
|
// $d = '',
|
||
|
// $f = 0;
|
||
|
// $f < 8;
|
||
|
// $g = ord($a[$f]),
|
||
|
// $d .= $s[($g ^ ord($a[$f + 8])) - $g & 0x1F],
|
||
|
// $f++
|
||
|
// );
|
||
|
// return $d;
|