Initial Hop alpha
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
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[:])
|
||||
}
|
||||
Reference in New Issue
Block a user