opc_request_id.go raw
1 package utils
2
3 import (
4 "crypto/rand"
5 "encoding/hex"
6 "fmt"
7 )
8
9 // GenerateOpcRequestID -
10 // Maximum segment length: 32 characters
11 // Allowed segment contents: regular expression pattern /^[a-zA-Z0-9]{0,32}$/
12 func GenerateOpcRequestID() string {
13 clientId := generateUniqueID()
14 stackId := generateUniqueID()
15 individualId := generateUniqueID()
16
17 opcRequestId := fmt.Sprintf("%s/%s/%s", clientId, stackId, individualId)
18
19 return opcRequestId
20 }
21
22 func generateUniqueID() string {
23 b := make([]byte, 16)
24 _, err := rand.Read(b)
25 if err != nil {
26 return ""
27 }
28
29 return hex.EncodeToString(b)
30 }
31