A dica do Guilherme Medeiros é ótima.
Você não precisa (e nem é bom) usar o uid como chave da sua tabela,
armazene ele em um campo separado.
Isso vai dar menos dor de cabeça no futuro.
Outra forma de gerar o uid:
$caracteres = str_split('abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
1);
shuffle($caracteres);
$uid = implode($caracteres);
Aí você da um substr($uid, 0, $tamanho) para o $tamanho que quiser.
Porém você vai ter que ficar verificando as colisões. O ideal era
gerar a partir da chave auto_increment para não ter colisões.
2012/10/22 Alisson Linneker <
alisson...@gmail.com>:
> Galera, penei mais consegui. Vejam como ficou a função:
>
> function uid($tc = false, $l = 11)
> {
> $s = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
> $uid = null;
> $loop = false;
> while(strlen($uid) < $l)
> $uid .= $s[mt_rand( 0, (strlen($s) - 1) )];
> if (preg_match('#([a-z0-9_-]+).([a-z0-9_-]+)#&', $tc, $tc)) {
> $loop = mysql_query("SELECT COUNT(*) FROM `$tc[1]` WHERE `$tc[2]` =
> '$uid' LIMIT 1") or die ("Erro ao verificar uid");
> $loop = mysql_fetch_array($loop);
> $loop = $loop[0];
> }
> while($loop);
> return $uid;
> }
>
> Explicando:
>
> Em $s você define os caracteres que podem ser usados na geração do código.
>
> Ele pegará o último ID de uma determinada tabela no banco de dados, e a
> partir dele se gera um "código" único. Este retorno pode ser definido em uma
> certa quantidade de caracteres.
>
> Exemplo de uso:
>
> uid('pessoas.p_id', 5);
>
> Retorna então um código de 5 caracteres de acordo com o último ID da tabela
> "pessoas".
>
> Caso não queira usar conexão com mysql, vc pode gerar um número único da
> seguinte forma:
>
> uid('null', 5);
>
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "php-brasil"
> dos Grupos do Google.
> Para ver esta discussão na web, acesse
>
https://groups.google.com/d/msg/php-brasil/-/46j-Nqns9eEJ.