加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 如何在laravel 5中创建一个唯一的随机字符串

发布时间:2020-12-14 19:38:32 所属栏目:大数据 来源:网络整理
导读:参见英文答案 PHP: How to generate a random,unique,alphanumeric string?25个 我是laravel 5的新手.我正在开发一个项目,我希望为每个应用程序分配一些随机可读的唯一字符串.我知道可以用作种子的每个应用程序ID.由于该应用程序将在公司内使用,我不担心安全
参见英文答案 > PHP: How to generate a random,unique,alphanumeric string?25个
我是laravel 5的新手.我正在开发一个项目,我希望为每个应用程序分配一些随机可读的唯一字符串.我知道可以用作种子的每个应用程序ID.由于该应用程序将在公司内使用,我不担心安全性.我希望表的大小能够增长,所以我的目标是尽可能地实现唯一性,因为DB中的字段是唯一的.像(EN1A20,EN12ZOV等)的代码.如果函数可以允许我传递我想要返回的字符串的长度,那真的很棒.

编辑
下面显示的是我对这个问题的尝试

private function generate_app_code($application_id) { 
        $token = $this->getToken(6,$application_id);
        $code = 'EN'. $token . substr(strftime("%Y",time()),2);

        return $code;
    }

    private function getToken($length,$seed){    
        $token = "";
        $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $codeAlphabet.= "0123456789";

        mt_srand($seed);      // Call once. Good since $application_id is unique.

        for($i=0;$i<$length;$i++){
            $token .= $codeAlphabet[mt_rand(0,strlen($codeAlphabet)-1)];
        }
        return $token;
    }

上面的代码可以解决这个问题吗?

编辑

实际上我借用了这篇文章PHP: How to generate a random,alphanumeric string?中的想法来推出上述方法,但这篇文章并没有完全解决我的问题.我的目标是生成一个长度为6到8的字符串(字母数字和可读).我的管理员将使用此字符串进行查询.在我的函数中,我有mt_srand($seed)来种子随机数生成器,其中seed是我的application_id.可以获得重复的$token.

感谢帮助.

尝试解决问题后,您可以应用以下内容以确保唯一代码:
do
{
    $token = $this->getToken(6,$application_id);
    $code = 'EN'. $token . substr(strftime("%Y",2);
    $user_code = User::where('user_code',$code)->get();
}
while(!empty($user_code));

编辑

为了避免laravel中的无限循环,请使用

do
    {
        $token = $this->getToken(6,2);
        $user_code = User::where('user_code',$code)->get();
    }
    while(!$user_code->isEmpty());

http://laravel.com/api/5.0/Illuminate/Support/Collection.html#method_isEmpty

或者去

do
        {
            $token = $this->getToken(6,$application_id);
            $code = 'EN'. $token . substr(strftime("%Y",2);
            $user_code = User::where('user_code',$code)->first();
        }
        while(!empty($user_code));

而不是get(),使用first(). $user_code可能是唯一的,所以我们可以方便地取出第一个结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读