<?php
class GenCrypt
{
public function generate()
{
$hashSource = array_merge(range('A', 'Z'), range('a', 'z'), range(0, 9));
$hashRandom = array_rand($hashSource, 12);
shuffle($hashRandom);
return implode(',', $hashRandom);
}
}
$gen = new GenCrypt;
$count = array();
for ($i = 0; $i < 1000; $i++) {
$count[] = $gen->generate();
}
var_dump(count($count));
var_dump(count(array_unique($count)));
我想生成非重复的序列号,因此我使用array_rand
和shuffle
来避免重复数据,但仍然会获得定期重复的结果,如何使其工作?
答案 0 :(得分:1)
array_rand
不提供独特的元素,它只会获取一个或多个randoms。您需要使用array_unique
来检索唯一身份用户。此外,没有必要改组randoms。
总结:
// $hashRandom = array_rand($hashSource, 12); // no promise on uniqueness
while(count($hashRandom = array_unique(array_rand($hashSource, count($hashSource)))) < 12) {
/* insuccessful try, repeat */
}
// here $hashRandom has 12 uniques
一般情况下,第一次尝试应该从12
中随机抽取count($hashSource)
个唯一元素。如果没有,将重新评估该陈述,直到12
屈服。希望它有所帮助。