创建唯一的随机字母数字字符串

在简单的用户表中,添加用户时,主键“userid”字段自动唯一,因为它会自动递增。但我想添加另一个最大长度为 8 个字符的字母数字字段,该字段对于每个用户来说都是唯一的。以下是我使用的功能。我从一个网站得到的。


function unique_code($limit)

{

 return substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, $limit);

 }

 echo unique_code(8);

它总会给我带来独特的价值吗?如果是的话,那就没问题了。但如果不行,还有其他办法吗?


呼唤远方
浏览 76回答 1
1回答

至尊宝的传说

uniqid() 可以多次创建相同的 id:<?phpfor($i=0;$i<20;$i++) {    echo uniqid(), PHP_EOL;}/** Example of Output:5819f3ad1c0ce5819f3ad1c0ce5819f3ad1c0ce5819f3ad1c0ce5819f3ad1c0ce5819f3ad1c0ce5819f3ad1c0ce5819f3ad1c0ce5819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b65819f3ad1c4b6 */我建议使用他创建的函数而不是使用 uniqid()。<?phpfunction uniqidReal($lenght = 13) {    // uniqid gives 13 chars, but you could adjust it to your needs.    if (function_exists("random_bytes")) {        $bytes = random_bytes(ceil($lenght / 2));    } elseif (function_exists("openssl_random_pseudo_bytes")) {        $bytes = openssl_random_pseudo_bytes(ceil($lenght / 2));    } else {        throw new Exception("no cryptographically secure random function available");    }    return substr(bin2hex($bytes), 0, $lenght);}
打开App,查看更多内容
随时随地看视频慕课网APP