[B4X] UUID versão 4

Lucas Siqueira

Active Member
Licensed User
Longtime User
B4X:
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
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…