随机产生独一无二的数字 随机产生独一无二6位的数字和对应的12位数字.比如:需要1万个如:244855 587753043808558676 168139952943 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 For($i=10000;$i<=99999;$i++) { Echo "244855 5877530{$i}<br>";} GUIDhttp://baike.baidu.com/view/185358.htmPHP有函数可直接生成GUID 你可以这样生成for($i=0; $i<30000; $i++) { //产生3万个6位数 $r[] = rand(100000, 999999);}if(count(array_flip(array_count_values($r)))>1) {//检查是否有重复 exit('有重复, 重新执行');}foreach(array_chunk($r, 3) as $t) { //切割成3个一组 $res[] = array( $t[0], $t[1].$t[2]); //放到数组, 你根据你的需要进行保存}print_r($res); $check = array();for($i=0; $i<30000; $i++){ do { $rnum = rand(100000, 999999); } while (isset($check[$rnum])); $check[$rnum] = 1;}print_r(array_keys($check));这是生成1万个不重复6位数的,12位的同理,然后两两配对使用就好了。就是用一个hash利用key记录已经生成过的数,然后用isset判断。 复制了楼上的循环代码,忘改循环边界了,应该是$check = array();for($i=0; $i<10000; $i++){ do { $rnum = rand(100000, 999999); } while (isset($check[$rnum])); $check[$rnum] = 1;}print_r(array_keys($check)); 如果是5万的数据呢?我加到5万的话,也就是$i<150000,那么就会执行exit('有重复, 重新执行');就不能生成了. 生成1万的随机数,如果服务器不够牛的话稍微复杂一点进行判断重复,然后取值存入内存.这对于服务器来说是一笔很大的开支.请问bing15,你是要做什么工作需要一次性产生这么多的随机数?难道不能即时产生吗?类似 Echo time().rand(10000,99999); <?php$numbers = range(100000,999999);srand((float)microtime()*1000000);shuffle($numbers);$i = 10000;foreach ($numbers as $number) { if ($i-- < 0) break; echo "$number\r\n";}?> php 的伪随机数发生器的周期为 32768,就是说 32768 次 rand 后就要出现重复了我的代码只是利用了这一点,代码中使用了数组是为了让你有机会检查其实只需要直接在第一个循环中输出就可以了,程序变形为$s = 100000;$e = 999999;for($i=0; $i<10000; $i++) { echo rand($s, $e) . ' ' . rand($s, $e) . rand($s, $e) .'<br>';}当然,在超出为随机数周期时,是需要缓存中间结果并检查是否有重复的你只需要1万个测试数据,就没有必要干那吃力不讨好的事情了 关于PHP建站 有熟悉事务或PDO的吗?老是回滚,删除不掉数据 PHP include_once的时候出现莫名其妙的回车换行 录入问题 PHP中如何调用第3方DLL? 下面这句代码哪里错了 php表单提交问题~~~~郁闷 如何实现网业的自动加1?在线等待中。。。 超级大难题!!!关于php和oracle数据库 [求助] 关于thinkphp在iis伪静态求助 mysql输出年月分类求助
Echo "244855 5877530{$i}<br>";
}
http://baike.baidu.com/view/185358.htm
PHP有函数可直接生成GUID
$r[] = rand(100000, 999999);
}
if(count(array_flip(array_count_values($r)))>1) {//检查是否有重复
exit('有重复, 重新执行');
}foreach(array_chunk($r, 3) as $t) { //切割成3个一组
$res[] = array( $t[0], $t[1].$t[2]); //放到数组, 你根据你的需要进行保存
}
print_r($res);
$check = array();
for($i=0; $i<30000; $i++)
{
do
{
$rnum = rand(100000, 999999);
}
while (isset($check[$rnum]));
$check[$rnum] = 1;
}
print_r(array_keys($check));这是生成1万个不重复6位数的,12位的同理,然后两两配对使用就好了。就是用一个hash利用key记录已经生成过的数,然后用isset判断。
for($i=0; $i<10000; $i++)
{
do
{
$rnum = rand(100000, 999999);
}
while (isset($check[$rnum]));
$check[$rnum] = 1;
}
print_r(array_keys($check));
就不能生成了.
请问bing15,你是要做什么工作需要一次性产生这么多的随机数?
难道不能即时产生吗?类似 Echo time().rand(10000,99999);
$numbers = range(100000,999999);
srand((float)microtime()*1000000);
shuffle($numbers);$i = 10000;
foreach ($numbers as $number) {
if ($i-- < 0) break;
echo "$number\r\n";
}
?>
我的代码只是利用了这一点,代码中使用了数组是为了让你有机会检查
其实只需要直接在第一个循环中输出就可以了,程序变形为$s = 100000;
$e = 999999;
for($i=0; $i<10000; $i++) {
echo rand($s, $e) . ' ' . rand($s, $e) . rand($s, $e) .'<br>';
}
当然,在超出为随机数周期时,是需要缓存中间结果并检查是否有重复的
你只需要1万个测试数据,就没有必要干那吃力不讨好的事情了