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.




