我是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可能是唯一的,所以我们可以方便地取出第一个结果.
总结以上是内存溢出为你收集整理的php – 如何在laravel 5中创建一个唯一的随机字符串全部内容,希望文章能够帮你解决php – 如何在laravel 5中创建一个唯一的随机字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)