17 lines
420 B
Go
17 lines
420 B
Go
package serial
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/base32"
|
|
"fmt"
|
|
)
|
|
|
|
// New appends a 26-character base32 value with 128 random bits to prefix.
|
|
func New(prefix string) (string, error) {
|
|
var entropy [16]byte
|
|
if _, err := rand.Read(entropy[:]); err != nil {
|
|
return "", fmt.Errorf("generate serial number: %w", err)
|
|
}
|
|
return prefix + base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(entropy[:]), nil
|
|
}
|