Sub UUIDv4 As String
Dim sb As StringBuilder
sb.Initialize
' Definindo o formato do UUID com 5 grupos (8, 4, 4, 4, 12 caracteres, respectivamente)
For Each stp As Int In Array(8, 4, 4, 4, 12)
' Adiciona um hífen (-) entre os grupos, exceto antes do primeiro grupo
If sb.Length > 0 Then sb.Append("-")
' Itera pelos números de caracteres em cada grupo
For n = 1 To stp
' Gera um número aleatório entre 0 e 15 (hexadecimal)
Dim c As Int = Rnd(0, 16)
' Converte o número aleatório em um caractere hexadecimal (0-9 ou a-f)
If c < 10 Then
c = c + 48 ' Converte números de 0-9 para seus valores ASCII (48 = '0')
Else
c = c + 87 ' Converte números de 10-15 para seus valores ASCII ('a'-'f', 87 é o offset)
End If
' Se estamos no início do quarto grupo (sb.Length = 19), ajustamos o primeiro caractere
' Este valor deve ser 8, 9, a, ou b, como definido pela especificação UUID v4
If sb.Length = 19 Then
' Cria um array explicitamente do tipo String com os valores possíveis
Dim variantArray() As String = Array As String("8", "9", "a", "b")
' Seleciona aleatoriamente um valor do array e converte para ASCII
c = Asc(variantArray(Rnd(0, variantArray.Length)))
End If
' Se estamos no início do terceiro grupo (sb.Length = 14), definimos a versão do UUID como 4
' Isso é exigido pela especificação UUID v4
If sb.Length = 14 Then
c = Asc("4") ' Define o caractere como "4", indicando a versão 4
End If
' Adiciona o caractere gerado ao StringBuilder
sb.Append(Chr(c))
Next
Next
' Retorna a string completa do UUID, convertida para minúsculas
Return sb.ToString.ToLowerCase
End Sub