#!/bin/sh
# \
exec tclsh8.7 "$0" ${1+"$@"}

# uuidgen --
#
#	This file implements version 4 uuid generator.
#
# Copyright (c) 2017 Taketsuru <taketsuru11@gmail.com>.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

set randomDevice "/dev/random"

set fd [open $randomDevice rb]
set random [read $fd 16]
close $fd

binary scan $random "c*" randomArray

set output ""
for {set i 0} {$i < 16} {incr i} {
    set val [lindex $randomArray $i]
    switch -exact $i {
	6 {
	    set val [expr {($val & 0x0f) | 0x40}]
	}
	8 {
	    set val [expr {($val & 0x3f) | 0x80}]
	}
	default {
	    set val [expr {$val & 0xff}]
	}
    }

    switch -exact $i {
	4 -
	6 -
	8 -
	10 {
	    append output "-"
	}
    }

    append output [format {%02x} $val]
}

puts $output

Add a utility to generate version 4 UUIDs.
Add a utility to generate version 4 UUIDs.
