随机产生独一无二的数字 随机产生独一无二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万个测试数据,就没有必要干那吃力不讨好的事情了 关于Smarty,动态函数数组循环的问题 大伙好,PHP+apache+sqlserver 的 php事务处理? 有人知道么?谢谢. 如何让上传的图片名生成随机的文件名? php 做的邮局系统问题 DZ的表单不少采用了数组变量,提交后如何处理? 配置服务器时出现 :loadlibrary("***.dll")失败-找不到指定的模块。 拜求图片上传代码——100分恭候 如何实现论坛中实现类似QQ样的即时消息发送! PHP中cookie的问题!! phpexcel 读取时 有值时空的 [求助] 关于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万个测试数据,就没有必要干那吃力不讨好的事情了