Clipper On Line • Ver Tópico - UUID - Identificador Universal Único

UUID - Identificador Universal Único

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

UUID - Identificador Universal Único

Mensagempor Itamar M. Lins Jr. » 10 Fev 2020 16:39

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


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.
function main
? win_UuidCreateString()
return nil
>hbmk2 uuid.prg hbwin.hbc


https://medium.com/trainingcenter/o-que-%C3%A9-uuid-porque-us%C3%A1-lo-ad7a66644a2b

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

UUID - Identificador Universal Único

Mensagempor JoséQuintas » 10 Fev 2020 18:16

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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

UUID - Identificador Universal Único

Mensagempor susviela@bol.com.br » 11 Fev 2020 15:22

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.
.
.
"E quando você perder o controle, colherá o que plantou."
=========================================
Carlos Alberto Nunes #Susviela
Site: https://www.PowerInformatica.com.br
=========================================
Blog xBase: https://programandoxbase.wordpress.com/
Blog TI: https://susviela.wordpress.com

( #ProgramandoxBase #AllxBase )
Avatar de usuário

susviela@bol.com.br
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 236
Data de registro: 30 Jun 2017 11:17
Cidade/Estado: São José / SC
Curtiu: 153 vezes
Mens.Curtidas: 24 vezes

UUID - Identificador Universal Único

Mensagempor bencz » 11 Fev 2020 17:13

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:

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
Imagem
Avatar de usuário

bencz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 517
Data de registro: 28 Abr 2012 17:36
Curtiu: 6 vezes
Mens.Curtidas: 34 vezes

UUID - Identificador Universal Único

Mensagempor Itamar M. Lins Jr. » 11 Fev 2020 19:53

Ola!
https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_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/#!searchin/harbour-users/uuid%7Csort:date/harbour-users/uwLfSaSMlEM/Y3-iMKliBwAJ
Mais abaixo, dizem para usar:
   i := Int( hb_Random( 0, 0xffff ) % 17 )  


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

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

UUID - Identificador Universal Único

Mensagempor Itamar M. Lins Jr. » 11 Fev 2020 20:07

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

UUID - Identificador Universal Único

Mensagempor Itamar M. Lins Jr. » 11 Fev 2020 20:13

Ola!
Já esse ai do mod_harbour, não atendeu ao formato solicitado.
function GenerateUUID()


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6927
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 309 vezes
Mens.Curtidas: 503 vezes

UUID - Identificador Universal Único

Mensagempor alxsts » 11 Fev 2020 21:52

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:
SELECT NewId ()
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Google [Bot] e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro