Ir al contenido principal

[VB] - Generar GUID

Esta si es buena...
Como se nota que VB es un lenguaje con "solera", es decir, con años pero con robustez. Pero le pasa como al abuelo Cebolleta, tiene experiencia pero para los nuevos tiempos... ains.. le falta algo.

Hoy en dia no sabriamos hacer nada sin un buen GUID, sobre todo si lo que queremos es identificar de forma unica y constante algun registro, objeto u otro componente.

Usando SQL podemos generar un GUID en un santiamen a traves de la instrucción NEWID(), podemos crear un nuevo GUID en .NET usando la clase GUID.. pero... como lo hacemos con Visual Basic 6?

Para empezar, vamos a ver en que se compone un GUID

¿Que es un GUID?
Su significado es Globally Unique Identifier, osea Identificador globalmente único. Y su misión es la de proporcionar un identificador, de forma que es practicamente imposible que existan dos iguales en el mundo.
Se compone de una palabra de 4 bytes, 3 palabras de 2 bytes y una de 6 bytes.
Originalmente fue una idea de Microsoft para identificar sus objetos OLE, estos se denominan CLSID.
{C802231C-140D-4D91-BEFF-0B9DC2A2877B}

¿Como hacemos esta maravilla de identificador?
Para ello vamos a usar el método coCreateGUID de la libreria OLE32.DLL y crearemos un Type con la configuración de un GUID (ya sabes, 4-2-2-2-6)

Private Type newGUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Un momento.... hemos dicho 4-2-2-2-6, entonces ¿Por qué hacemos una estructura de 4 (Long), 2 (Integer), 2 (Integer) y Array(7) Byte (osea, 8 Bytes)?

Muy facil, realmente el 3er grupo de 2 bytes es parte del ultimo grupo de 6 Bytes, solo que va separado de este último grupo, es un poco lioso pero en resumidas cuenta, el último grupo lleva los bytes correspondiente al último grupo de 2 Bytes y el grupo de 6 Bytes.
{Data1 - Data2 - Data3 - 2Bytes de Data4 - 6Bytes de Data4}
¿A que ahora queda un poco mas claro?

Luego invocamos a la función coCreateGUID para rellenar este tipo

Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As newGUID) As Long

Esta función devuelve 0 si se ha procesado correctamente, y rellenará los valores. Solo tenemos que volver a convertirlos en una cadena  String

Dim udtGUID As newGUID
Dim GetGUID As String

If (CoCreateGuid(udtGUID) = 0) Then
GetGUID = _
String(8 - Len(Hex$(udtGUID.Data1)), "0") & Hex$(udtGUID.Data1) & "-" & _
String(4 - Len(Hex$(udtGUID.Data2)), "0") & Hex$(udtGUID.Data2) & "-" & _
String(4 - Len(Hex$(udtGUID.Data3)), "0") & Hex$(udtGUID.Data3) & _
IIf((udtGUID.Data4(0) < &H10), "0", "") & Hex$(udtGUID.Data4(0)) & "-" & _
IIf((udtGUID.Data4(1) < &H10), "0", "") & Hex$(udtGUID.Data4(1)) & _
IIf((udtGUID.Data4(2) < &H10), "0", "") & Hex$(udtGUID.Data4(2)) & _
IIf((udtGUID.Data4(3) < &H10), "0", "") & Hex$(udtGUID.Data4(3)) & _
IIf((udtGUID.Data4(4) < &H10), "0", "") & Hex$(udtGUID.Data4(4)) & _
IIf((udtGUID.Data4(5) < &H10), "0", "") & Hex$(udtGUID.Data4(5)) & _
IIf((udtGUID.Data4(6) < &H10), "0", "") & Hex$(udtGUID.Data4(6)) & _
IIf((udtGUID.Data4(7) < &H10), "0", "") & Hex$(udtGUID.Data4(7))
End If

Esta función la puedes descargar en el siguiente enlace

Comentarios

  1. me gustaria tener este mismo pero que sea para la version de visual studio 2010

    ResponderEliminar
    Respuestas
    1. Visual Studio 2010 tiene su propio generador de GUID integrado. Podrás verlo dentro del menú "Herramientas" (o "Tools" si tienes versión inglesa).
      Crear GUID.
      Esta opción te crea un nuevo GUID para tus aplicaciones, pero no es un generador "runtime".
      Por favor, podrías especificar que lenguaje estás usando? porque si es C# tienes instrucciones que te lo hacen automáticamente. Como indica en este artículo, Visual Basic 6.5 no tiene como generarlo.

      Eliminar

Publicar un comentario

Si quieres comentar, criticar, aportar mas informacion o simplemente felicitar, inserta tu comentario a continuacion. Entre todos podemos hacer cosas grandes.

Entradas populares de este blog

[.NET] Convertir Latitud y Longitud en Grados - Minutos y segundos

Hola a todos. Esta es una función para convertir un número de posición geográfica en grados, minutos y segundos. Como algunos pocos recordarán,una posición geográfica esta definida por latitud (Norte / Sur) y longitud (Este / Oeste) teniendo como referencia para la longitud el meridiano de Greenwich (Meridiano 0) y para la latitud la linea del Ecuador (Paralelo 0). Por lo que siempre hablaremos de posición " Grados Norte ", o " Grados Este ". Ahora es cuando entra en juego las matemáticas y la trigonometría (he de admitir que me encantan :D ). El hemisferio norte o sur solo tendría 90° Norte o Sur. Por ejemplo, El polo norte está a 90° 0' 0'' N de latitud. La longitud podríamos considerar el 0° 0' 0'' (estamos en el polo norte, por lo que es un solo punto, no hay longitud). En cambio, si nos movemos alrededor de la tierra por la linea de Ecuador, la latitud será 0° 0' 0'' (ni al norte, ni al sur) pero de Este a Oeste nos m