PHP-php 随机10位数字
现在有这样一个需求:批量生成10位纯数字,要求一次可生成任意个,并且范围在1000000000-9999999999内。并且生成的数要跨度大不能重复,并且入库(即库中有了就不能生成并且叉库了,那样会报唯一索引冲突,还得写递归什么的)。保证效率。求各位大神支招!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
function unique_rand($count) {
$result = array();
$sum = 0;
while ($sum < $count) {
$nember = mt_rand(1000000000, 9999999999);
if (!in_array($nember, $result)) {
$result[] = $nember;
++$sum;
}
}
return $result;
}
最基本的满足了提问要求。
不过实际上存在一个问题:这样的方法不能保证数据库中键值唯一性。
如果条件许可,建议您参考一下mysql的uuid_short()函数。
<?php
/*
* array unique_rand( int $min, int $max, int $num )
* 生成一定数量的不重复随机数
* $min 和 $max: 指定随机数的范围
* $num: 指定生成数量
*/
function unique_rand($min, $max, $num) {
$count = 0;
$return = array();
while ($count < $num) {
$return[] = mt_rand($min, $max);
$return = array_flip(array_flip($return));
$count = count($return);
}
shuffle($return);
return $return;
}
$arr = unique_rand(1, 25, 16);
sort($arr);
$result = '';
for($i=0; $i < count($arr);$i++)
{
$result .= $arr[$i].',';
}
$result = substr($result, 0, -1);
echo $result;
?>
百度找的生成N个不重复的随机数
楼上的方法,对于count的量大,会变得慢.
最好$result改成key 以索引方式存放,避免in_array
function unique_rand($count) {
$result = array();
$sum = 0;
while ($sum < $count) {
$nember = mt_rand(1000000000, 9999999999);
if (!$result[$nember]) {
$result[$nember] = true;
++$sum;
}
}
return array_keys($result);
}
同样不能满足数据库的唯一性,我建议是时间戳后6位+两位PID+2位随机数。如果需要大的跨度,可以把数字转文本方式再倒转。
可以参考mongo的objectId生产方式,不过mongo的是24位16进制(12byte空间)