Files
GitHop/internal/hop/id.go
T
2026-07-11 07:33:41 -07:00

29 lines
671 B
Go

package hop
import (
"crypto/rand"
"encoding/base32"
"fmt"
"strings"
"time"
)
var idEncoding = base32.NewEncoding("0123456789ABCDEFGHJKMNPQRSTVWXYZ").WithPadding(base32.NoPadding)
func newID(prefix string) string {
var entropy [8]byte
if _, err := rand.Read(entropy[:]); err != nil {
panic(fmt.Sprintf("generate id: %v", err))
}
stamp := uint64(time.Now().UTC().UnixMilli())
var raw [14]byte
raw[0] = byte(stamp >> 40)
raw[1] = byte(stamp >> 32)
raw[2] = byte(stamp >> 24)
raw[3] = byte(stamp >> 16)
raw[4] = byte(stamp >> 8)
raw[5] = byte(stamp)
copy(raw[6:], entropy[:])
return strings.ToUpper(prefix) + "_" + idEncoding.EncodeToString(raw[:])
}