1
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
package common
|
||||
|
||||
import "crypto/rand"
|
||||
|
||||
// UuidV4 生成 UUIDv4 字符串(crypto/rand 16 字节 + 版本/变体位,无第三方依赖);
|
||||
// 用于封面等文件名,避免固定命名碰撞。
|
||||
func UuidV4() string {
|
||||
var b [16]byte
|
||||
if _, err := rand.Read(b[:]); err != nil {
|
||||
panic(err) // crypto/rand 失败属系统级故障,直接崩溃重启
|
||||
}
|
||||
b[6] = (b[6] & 0x0f) | 0x40 // version 4
|
||||
b[8] = (b[8] & 0x3f) | 0x80 // variant 10
|
||||
const hex = "0123456789abcdef"
|
||||
out := make([]byte, 36)
|
||||
j := 0
|
||||
for i := 0; i < 16; i++ {
|
||||
if i == 4 || i == 6 || i == 8 || i == 10 {
|
||||
out[j] = '-'
|
||||
j++
|
||||
}
|
||||
out[j] = hex[b[i]>>4]
|
||||
j++
|
||||
out[j] = hex[b[i]&0x0f]
|
||||
j++
|
||||
}
|
||||
return string(out)
|
||||
}
|
||||
Reference in New Issue
Block a user