Gabriel Zuqueto Amaral
www.gabrielzuqueto.eti.br

GUID é confiável?

Nesse post faço um experimento para verficiar se é seguro utilizar GUID.

GUID é confiável?

Resolvi fazer um experimento para verificar se realmente o GUID é confiável, ou seja, se ele é único mesmo para cada registro.

Nesse experimento utilizei o SGDB Oracle MySQL para guardar os 200000 (Duzentos Mil) GUIDs que gerei com o PHP.

Utilizei uma função para gerar GUID que peguei em um dos comentários do manual PHP.

O experimento

Segue o código-fonte da função GUID utilizada no experimento:

function GUID()
{
    if (function_exists('com_create_guid') === true)
    {
        return trim(com_create_guid(), '{}');
    }

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}

Segue o SQL utilizado para criar a base de dados e a tabela utilizadas no teste:

DROP DATABASE IF EXISTS `php_guid`;
CREATE DATABASE `php_guid`;

DROP TABLE IF EXISTS `guid`;
CREATE TABLE `guid` (
  `guid` varchar(36) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Para popular a tabela, utilizei o seguinte script:

function GUID(){
    if (function_exists('com_create_guid') === true){return trim(com_create_guid(), '{}');}

    return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
}

$link = mysql_connect('127.0.0.1','SEU_USUARIO','SUA_SENHA',true);
mysql_select_db('php_guid',$link);

for($i=0;$i<200000;$i++){
	$sql = "INSERT INTO guid(guid)VALUES('".GUID()."');";
	mysql_query($sql,$link);
}
mysql_close($link);

Sei que existem N maneiras de popular a tabela mais rápido, mas resolvi utilizar essa por ser mais simples.

Eu poderia ter gerado de 1000 em 1000 (ou mais) GUIDs e ter feito um INSERT para carregar os 1000 gerados de uma só vez. Isso me pouparia tempo de espera, mas não me preocupei com isso.

Rodei esse script através do terminal, utilizando o comando php -a para abrir o interpretador PHP e colando o script mostrado acima.

Após o script ter gerado os 200000 registros, utilizei o seguinte comando SQL para verificar a existência de valores duplicados:

SELECT guid, COUNT(guid) gd FROM guid GROUP BY guid HAVING gd > 1;

O resultado foi como o esperado, não retornou nenhum valor, ou seja, os GUIDs são únicos, logo, a utilização de GUID é confiável! Podem utilizar sem medo!

Para quem não sabe, o GUID (Globally Unique IDentifier - Identificador Global Único) é utilizado pela Tabela de Partição GPT, pelo Windows para identificar Classes e Interfaces de objetos COM, por gerenciadores de bancos de dados (SGDB) como o Oracle e dBase, pela Novell no seu serviço de diretórios denominado eDirectory, entre outros…

Segue um link da Wikipédia com mais informções sobre GUID: Indentificador Único Global

https://gabrielzuqueto.eti.br/guid-e-confiavel 2018-01-22 15:30:00 -0200 gabrielzuqueto

Deixe seu comentário

Não perca mais nenhum post!

Cadastre-se e receba novos posts diretamente em seu e-mail.

Escolhidos para você

Como usar GitHub?
Como usar GitHub?

RSpec Stub AWS SQS
RSpec Stub AWS SQS

Como criar servidor para envio de e-mail em massa
Como criar servidor para envio de e-mail em massa

Vultr Cloud - Receba $ 50 em crédito
Vultr: Receba $ 50 em crédito

DigitalOcean - Receba $ 50 em crédito
DigitalOcean: Receba $ 50 em crédito

NordVPN - Liberdade, Segurança e Anonimato
NordVPN: Liberdade, Segurança e Anonimato. $ 3.49/mo *