Ítalo Barboza

Naturalmente um sonhador. Programador e fotógrafo somente nas horas vagas

Arquivo com marcação ‘aleatório’

Gerando IDs únicos

deixe seu comentário

Olá pesso@l, tudo bem? Outro dia eu precisei gerar um número de identificação (ID) aleatório para uma rotina em que eu estava dando manutenção e uma rápida pesquisa no “Pai” Google, fui contemplado com um link para o PHPIt onde ele explica a utilização da função uniqid(), nativa do próprio PHP.

A sua utilização é tão simples quanto o seu conceito:

echo uniqid();
// Saída: 4e84c7d5a6987

Utilizando a função em um laço:

for ($i = 0; $i < 10; $i++) {
    echo uniqid() . '<br />';
}
// Saída: 4e84c875f38a8
// Saída: 4e84c875f38af
// Saída: 4e84c875f38b0
// Saída: 4e84c875f38b1
// Saída: 4e84c875f38b1
// Saída: 4e84c875f38b2
// Saída: 4e84c875f38b3
// Saída: 4e84c875f38b4
// Saída: 4e84c875f38b5
// Saída: 4e84c875f38b5

Analisando as saídas, percebe-se que existe um padrão seguido por esta função na geração da ID. Este padrão dar-se pelo uso da função microtime(), interna ao uniqid().

Podemos aumentar a entropia da função utilizando outras funções (tanto de hash quando de criptografia) no prefixo do código (primeiro parâmetro da função) e modificando a quantidade de caracteres gerados de 13 para 23 alterando o segundo parâmetro de FALSE (valor default) para TRUE. Confira no exemplo abaixo:

for ($i = 0; $i < 10; $i++) {
    echo uniqid(sha1(rand()), TRUE) . '<br />';
}
// Saída: 9f4b9d9df13f74457c4f0eb1bfed5b922ddb1bb34e84cbe9ec1ce7.27897791
// Saída: 299f161d0bb46a462bef82fdd45303fc965c6af34e84cbe9ec1dd5.74207369
// Saída: 644e71d99c5d8deadbe61949142ea5c40b576c0c4e84cbe9ec1e15.04481648
// Saída: bc85daf847620bcb9f88a09dee8880d6677a7e9d4e84cbe9ec1e53.09937296
// Saída: a812f5ddfdd241c29f9645ea09e14dedbdae2f1b4e84cbe9ec1e80.40306498
// Saída: 4ffba05e292341e54f6b149967cf0e728d4f11e84e84cbe9ec1eb9.94583297
// Saída: a456f63f28045d345974578e5c8cdc7929cae7844e84cbe9ec1ee1.01013992
// Saída: dd06d79f71ff9b2149eeb520a2a81b62d03808a24e84cbe9ec1f09.94216867
// Saída: d6b901451053e09732274be095410d19d44550794e84cbe9ec1f34.05750617
// Saída: 55f330cf75634311ecc24172f7dd61c3140b37f14e84cbe9ec1f61.26749318

Analisando a saída, percebe-se que a entropia agora é muito maior, otimizando ainda mais o resultado.

Bom, é isso. Acho que ficou claro e satisfatório o resultado para que a função uniqid() se propõe. Bons estudos e até a próxima. :D

Share on TwitterShare on TumblrSave on DeliciousShare via email

Publicado por Ítalo Barboza

29 de setembro de 2011 as 4:45 pm

Posted in PHP

Marcado com , , , ,