W3docs

uniqid()

Saiba como a função uniqid() do PHP gera IDs baseados no tempo em microssegundos, seus parâmetros e quando usá-la.

A função PHP uniqid() gera um ID de string derivado do tempo atual em microssegundos. Esta página explica sua sintaxe e parâmetros, como é o valor retornado, a importante ressalva de que ela não é adequada para tokens de segurança e o que usar em seu lugar.

O que uniqid() faz

uniqid() retorna uma string hexadecimal de 13 caracteres baseada no tempo atual do sistema, medido até o microssegundo. Como o relógio continua avançando, duas chamadas feitas mesmo uma fração de segundo apart geralmente produzem valores diferentes, o que torna a função útil para identificadores de baixo risco, como nomes de arquivos temporários, chaves de cache ou IDs de elementos DOM.

Trata-se de um identificador baseado no tempo, não em um valor aleatório. Essa distinção importa: o valor é previsível e, em uma máquina rápida, duas chamadas no mesmo microssegundo retornam a mesma string. Tenha isso em mente antes de depender dela para unicidade — e nunca para segredos.

Sintaxe

uniqid(string $prefix = "", bool $more_entropy = false): string
ParâmetroTipoDescrição
$prefixstringTexto adicionado antes do ID retornado. Útil quando vários hosts ou processos podem gerar IDs ao mesmo tempo. O padrão é uma string vazia.
$more_entropyboolQuando true, adiciona caracteres extras que tornam o resultado menos sujeito a colisões. O padrão é false.

Valor de retorno: uma string. Com argumentos padrão, tem 13 caracteres; com $more_entropy definido como true, tem 23 caracteres (o comprimento do prefixo é adicionado a ambos).

Uso básico

Chame uniqid() sem argumentos para obter um ID simples baseado em timestamp:

php— editable, runs on the server

O $id retornado tem 13 caracteres hexadecimais. Cada execução imprime um valor diferente porque o timestamp em microssegundos subjacente avançou.

Adicionando um prefixo

Passe uma string como primeiro argumento para adicioná-la antes do ID. Isso ajuda a distinguir IDs gerados em diferentes partes da sua aplicação, ou em servidores diferentes:

php— editable, runs on the server

O prefixo não é aleatório — ele é adicionado literalmente — portanto não aumenta a unicidade por si só. Seu papel é criar um namespace para o ID.

Mais entropia

Em um loop intenso, o timestamp pode se repetir e você pode obter IDs duplicados. Definir o segundo argumento como true adiciona caracteres extras (baseados em um gerador congruencial linear combinado) para reduzir esse risco:

php— editable, runs on the server

Com $more_entropy ativado, o resultado tem 23 caracteres. Isso reduz a chance de colisões, mas não torna o valor imprevisível.

Importante: uniqid() não é segura

Este é o erro mais comum com uniqid(). Como o valor é derivado do relógio, um atacante que sabe aproximadamente quando um ID foi criado pode adivinhá-lo. Nunca use uniqid() para:

  • tokens de redefinição de senha ou tokens de "link mágico"
  • identificadores de sessão ou chaves de API
  • tokens CSRF ou qualquer outro valor sensível à segurança

Para qualquer coisa que deva ser imprevisível, use uma fonte criptograficamente segura. random_bytes() (PHP 7+) é a ferramenta certa, opcionalmente convertida em uma string legível com bin2hex():

<?php
// 32-character, cryptographically secure random token
$token = bin2hex(random_bytes(16));
echo "Secure token: " . $token . "\n";
// e.g. Secure token: 93261fb1d3d843e8dac1d3372b4f3306
?>

Se você precisar de um identificador globalmente único em um formato padrão, um UUID (via uma biblioteca como ramsey/uuid) geralmente é mais adequado do que uniqid().

Quando usar uniqid()

uniqid() é uma boa escolha quando você precisa de um rótulo rápido e descartável e um pequeno risco de colisão é aceitável:

  • nomes de arquivos temporários de upload ou cache
  • atributos HTML id únicos gerados no lado do servidor
  • chaves de curta duração em caches não críticos para segurança

Para segredos imprevisíveis, use random_bytes(); para aleatoriedade de uso geral, veja mt_rand() e rand(); e se você precisar apenas do timestamp de alta resolução subjacente, consulte microtime().

Resumo

A função uniqid() produz um ID de 13 caracteres (ou 23 com $more_entropy) a partir do timestamp em microssegundos atual. É conveniente para identificadores não sensíveis e com baixa probabilidade de colisão, mas é previsível por design — para tokens de segurança, prefira sempre random_bytes(). Escolher a ferramenta certa para cada situação garante que seus IDs sejam suficientemente únicos e, quando necessário, impossíveis de adivinhar.

Prática

Prática
Qual é a função de uniqid() no PHP?
Qual é a função de uniqid() no PHP?
Was this page helpful?