aboutsummaryrefslogtreecommitdiff
path: root/module/hnh/util/uuid.scm
blob: 8e0434e3a9b61c564a8202d63ba4b84c9ac23106 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(define-module (hnh util uuid)
  :use-module (ice-9 format)
  :export (seed uuid uuid-v4))

(define seed (make-parameter (random-state-from-platform)))

(define (uuid-v4)
  (define version 4)
  (define variant #b10)
  (format #f "~8'0x-~4'0x-~4'0x-~4'0x-~12'0x"
          (random (ash 1 (* 4 8)) (seed))
          (random (ash 1 (* 4 4)) (seed))
          (logior (ash version (* 4 3))
                  (random (1- (ash 1 (* 4 3))) (seed)))
          (logior (ash variant (+ 2 (* 4 3)))
                  (random (ash 1 (+ 2 (* 4 3))) (seed)))
          (random (ash 1 (* 4 12)) (seed))))

(define uuid uuid-v4)