Jer*_*ire 17 php string random hash unique
我需要使用PHP生成一个字符串,它需要是唯一的,需要 4到8个字符(变量的值).
我以为我可以使用crc32哈希但我无法确定多少个字符,但肯定它会是唯一的.另一方面只创建一个"密码生成器"将生成重复的字符串,并检查表中的值,每个字符串将需要一段时间.
我怎样才能做到这一点?
也许我可以用它:
function unique_id(){
$better_token = md5(uniqid(rand(), true));
$unique_code = substr($better_token, 16);
$uniqueid = $unique_code;
return $uniqueid;
}
$id = unique_id();
Run Code Online (Sandbox Code Playgroud)
改为:
function unique_id($l = 8){
$better_token = md5(uniqid(rand(), true));
$rem = strlen($better_token)-$l;
$unique_code = substr($better_token, 0, -$rem);
$uniqueid = $unique_code;
return $uniqueid;
}
echo unique_id(4);
Run Code Online (Sandbox Code Playgroud)
你认为我每次都会获得独特的弦乐吗?
Jer*_*emy 47
简而言之,我认为你会获得相当不错的随机价值.总是有碰撞的可能性,但你已经尽一切可能获得随机值.uniqid()根据当前时间(以微秒为单位)返回随机值.指定兰特()(mt_rand(),效果会更好)和)的第二个参数为真,以uniqid(应甚至价值更是独一无二的.使用md5()散列值也应该使它非常独特,因为即使生成的两个随机值的微小差异也应该通过散列函数放大.idealmachine是正确的,因为较长的值不太可能发生碰撞而不是较短的值.
您的函数也可能更短,因为md5()将始终返回一个32个字符长的字符串.试试这个:
function unique_id($l = 8) {
return substr(md5(uniqid(mt_rand(), true)), 0, $l);
}
Run Code Online (Sandbox Code Playgroud)