Página 1 de 1
UUID - Identificador Universal Único
Enviado: 10 Fev 2020 16:39
por Itamar M. Lins Jr.
Ola!
O que é?
UUID é um identificador universalmente exclusivo utilizado para identificação de qualquer coisa no mundo da computação. O UUID é um número de 128 bits representado por 32 dígitos hexadecimais, exibidos em cinco grupos separados por hifens, na forma textual8-4-4-4-12 sendo um total de 36 caracteres (32 caracteres alfanuméricos e 4 hifens). Por exemplo:
3d0ca315-aff9–4fc2-be61–3b76b9a2d798
Código: Selecionar todos
function main
? random_uuid()
return nil
function random_uuid()
local cMask := 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
local cStringHex := '0123456789abcdef-', x
local cUUID := '', i, cCaracter
for x := 1 to Len( cMask )
i := Int( hb_Random( 0, 0xffff ) % 16 )
cCaracter := SubStr( cMask, x, 1 )
if cCaracter == 'x'
cUUID += SubStr( cStringHex, i, 1 )
elseif cCaracter == 'y'
cUUID += SubStr( cStringHex, HB_BitOr( HB_BitAnd( i, 0x03 ), 0x08 ), 1 )
else //- e 4
cUUID += cCaracter
endif
next
return cUUID
Ou usando as funções da HBWIN para quem tá no windows.
Código: Selecionar todos
function main
? win_UuidCreateString()
return nil
>hbmk2 uuid.prg hbwin.hbc
https://medium.com/trainingcenter/o-que ... 7a66644a2b
Saudações,
Itamar M. Lins Jr.
UUID - Identificador Universal Único
Enviado: 10 Fev 2020 18:16
por JoséQuintas
Apesar de aparentemente novidade....
No final das contas, é um número, que ao invés de decimal é hexadecimal.
Já pensei em algo assim, pra poder vincular tudo que existe no aplicativo.
É como um RecNo(), mas GERAL, e não de um único arquivo.
De posse do número, encontra-se a informação.
Lógico, pra uso mundial, definiram alguns padrões, e com certeza acaba limitando, e acaba deixando de ser tão universal assim.
Isso lembra também o IPV6, que substitui o tradicional IP 255.255.255.255
UUID - Identificador Universal Único
Enviado: 11 Fev 2020 15:22
por susviela@bol.com.br
Itamar M. Lins Jr. escreveu:O que é?
UUID é um identificador universalmente exclusivo utilizado para identificação de qualquer coisa no mundo da computação. O UUID é um número de 128 bits representado por 32 dígitos hexadecimais, exibidos em cinco grupos separados por hifens, na forma textual8-4-4-4-12 sendo um total de 36 caracteres (32 caracteres alfanuméricos e 4 hifens). Por exemplo:
3d0ca315-aff9–4fc2-be61–3b76b9a2d798
Alguns Sistemas Bancários já usam esse identificador único em suas transações.
É uma boa opção, para ID, só o tamanho um pouco grande, mas o custo benefício, para um sistema de grande porte parece razoável.
Obrigado por compartilhar, já tinha lido sobre isso.
UUID - Identificador Universal Único
Enviado: 11 Fev 2020 17:13
por bencz
Itamar, boas tardes!
Infelizmente, o seu código está gerando apenas uma mistura de números aleatórios e não está gerando um UUID valido ( teste o UUID gerado neste site:
https://www.uuidtools.com/decode... um UUID, ou também conhecido como GUID, possui algumas regras para ser gerado... no caso, você está gerando uma tentativa de GUID da versão 4, mas, está faltando um outro byte de identificação do GUID
Gerar um Guid valido não é a coisa mais simples da terra... por isso, é mais seguro utilizar as funções do sistema operacional, segue um exemplo:
Código: Selecionar todos
function start()
? GenerateGuid()
? GenerateGuid(.T.)
? GenerateGuid(.F.)
return nil
#pragma BEGINDUMP
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include "hbapi.h"
HB_FUNC ( GENERATEGUID )
{
GUID guid;
char guidString[37];
char guidStringFormat[68];
if((int)hb_parl(1) == 1)
strcpy(guidStringFormat, "%08lX-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX");
else
strcpy(guidStringFormat, "%08lx-%04hx-%04hx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx");
CoCreateGuid(&guid);
sprintf(guidString, guidStringFormat,
guid.Data1, guid.Data2, guid.Data3,
guid.Data4[0], guid.Data4[1], guid.Data4[2], guid.Data4[3],
guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
hb_retc(guidString);
}
#pragma ENDDUMP
UUID - Identificador Universal Único
Enviado: 11 Fev 2020 19:53
por Itamar M. Lins Jr.
Ola!
https://en.wikipedia.org/wiki/Universal ... 4_(random)
A versão 4 não é assim ? Mas realmente não é a minha praia.
O código é do Willian Manesco.
https://groups.google.com/forum/#!searc ... -iMKliBwAJ
Mais abaixo, dizem para usar:
Eu vou pelo raciocínio do José Quintas, é um numero grandão, com 5 campos aleatórios. Como se fosse 5 CPF's randomizado, muito difícil repetir.
Esse é mais um que achei nos exemplos do mod_harbour
Código: Selecionar todos
function Main()
BLOCKS
<script>
var value = sessionStorage.getItem( "MyId" );
if( value == null )
{
value = "{{generateUUID()}}";
sessionStorage.setItem( "MyId", value );
}
document.write( value );
</script>
ENDTEXT
? "UUID generated on the server"
return nil
function GenerateUUID()
local cChars := "0123456789ABCDEF"
local cUUID := ""
for n = 1 to 8
cUUID += SubStr( cChars, hb_Random( 1, 16 ), 1 )
next
cUUID += "-4"
for n = 1 to 3
cUUID += SubStr( cChars, hb_Random( 1, 16 ), 1 )
next
cUUID += "-"
for n = 1 to 4
cUUID += SubStr( cChars, hb_Random( 1, 16 ), 1 )
next
cUUID += "-"
for n = 1 to 12
cUUID += SubStr( cChars, hb_Random( 1, 16 ), 1 )
next
return cUUID
O objetivo é exatamente esse, mostrarmos a maneira de gerar um identificador que será muito difícil repetir.
Mas, ainda tem como vc mostrou, a forma correta de testar o calculo. Pois vi que tem versões 1,2,3,4 e 5 de calculo de UUID.
Saudações,
Itamar M. Lins Jr.
UUID - Identificador Universal Único
Enviado: 11 Fev 2020 20:07
por Itamar M. Lins Jr.
Ola!
Ue! testei 16% e 17%
Retornou como certo.
Disse que é uma variante dessa versão: DCE 1.1, ISO/IEC 11578:1996
Saudações,
Itamar M. Lins Jr.
UUID - Identificador Universal Único
Enviado: 11 Fev 2020 20:13
por Itamar M. Lins Jr.
Ola!
Já esse ai do mod_harbour, não atendeu ao formato solicitado.
function GenerateUUID()
Saudações,
Itamar M. Lins Jr.
UUID - Identificador Universal Único
Enviado: 11 Fev 2020 21:52
por alxsts
Olá!
Para quem usa banco de dados relacionais, basta executar o select apropriado para o banco em uso e obter o UUID ou GUID. Os principais gerenciadores de BD suportam esta funcionalidade.
Exemplo para MS SQL Server: