package m2mcore import ( "crypto/rand" "fmt" ) // NewUUIDv4 генерирует UUID v4 в каноническом формате 8-4-4-4-12. Без // внешних зависимостей: использует crypto/rand и выставляет биты // версии (4) и варианта (RFC 4122) согласно стандарту. func NewUUIDv4() (string, error) { var b [16]byte if _, err := rand.Read(b[:]); err != nil { return "", fmt.Errorf("m2mcore: чтение crypto/rand: %w", err) } b[6] = (b[6] & 0x0F) | 0x40 // версия 4 в старших битах 7-го байта b[8] = (b[8] & 0x3F) | 0x80 // RFC 4122 вариант (10xx) в 9-м байте return fmt.Sprintf("%08x-%04x-%04x-%04x-%012x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:16]), nil }