为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
呼唤远方 2023-08-11 16:10:51
在简单的用户表中,添加用户时,主键“userid”字段自动唯一,因为它会自动递增。但我想添加另一个最大长度为 8 个字符的字母数字字段,该字段对于每个用户来说都是唯一的。以下是我使用的功能。我从一个网站得到的。function unique_code($limit){ return substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, $limit); } echo unique_code(8);它总会给我带来独特的价值吗?如果是的话,那就没问题了。但如果不行,还有其他办法吗?
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

uniqid() 可以多次创建相同的 id:

<?php

for($i=0;$i<20;$i++) {

    echo uniqid(), PHP_EOL;

}


/** Example of Output:


5819f3ad1c0ce

5819f3ad1c0ce

5819f3ad1c0ce

5819f3ad1c0ce

5819f3ad1c0ce

5819f3ad1c0ce

5819f3ad1c0ce

5819f3ad1c0ce

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6

5819f3ad1c4b6 */

我建议使用他创建的函数而不是使用 uniqid()。


<?php

function 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);

}


查看完整回答
反对 回复 2023-08-11
  • 1 回答
  • 0 关注
  • 54 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信