12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package service
- import (
- "crypto/md5"
- "crypto/rand"
- "encoding/hex"
- "hash"
- rand2 "math/rand"
- )
- type UUID [16]byte
- const numBytes = "1234567890"
- func getUUID() (uuidHex string) {
- uuid := newUUID()
- uuidHex = hex.EncodeToString(uuid[:])
- return
- }
- func randStringBytes(n int) string {
- b := make([]byte, n)
- for i := range b {
- b[i] = numBytes[rand2.Intn(len(numBytes))]
- }
- return string(b)
- }
- func newUUID() UUID {
- ns := UUID{}
- safeRandom(ns[:])
- u := newFromHash(md5.New(), ns, randStringBytes(16))
- u[6] = (u[6] & 0x0f) | (byte(2) << 4)
- u[8] = (u[8]&(0xff>>2) | (0x02 << 6))
- return u
- }
- func newFromHash(h hash.Hash, ns UUID, name string) UUID {
- u := UUID{}
- h.Write(ns[:])
- h.Write([]byte(name))
- copy(u[:], h.Sum(nil))
- return u
- }
- func safeRandom(dest []byte) {
- if _, err := rand.Read(dest); err != nil {
- panic(err)
- }
- }
|