目前,我正在为名为randomId
的控制器方法内的数据创建UID。我已经粘贴了以下整个方法:
public static function randomId()
{
$id = str_random(12);
$validator = Validator::make(
['calculation_uid'=>$id],
['calculation_uid'=>'unique:calculations,calculation_uid']
);
if ($validator->fails()) {
$this->randomId();
}
return strtoupper($id);
}
基本上生成一个12位数的字母数字代码,然后通过验证器运行以确保它不存在;如果确实存在,则再次运行该方法。
我知道我可以通过将它增加到16个字符来减少碰撞的概率,但是如果我达到极限,我将永远增加它。
我有没有办法(缺乏更好的措辞)使这更独特?或者我的实施可能还可以吗?