PHP-php 随机10位数字

发布于 2017-08-24 03:34:49 字数 137 浏览 1286 评论 3

现在有这样一个需求:批量生成10位纯数字,要求一次可生成任意个,并且范围在1000000000-9999999999内。并且生成的数要跨度大不能重复,并且入库(即库中有了就不能生成并且叉库了,那样会报唯一索引冲突,还得写递归什么的)。保证效率。求各位大神支招!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮生未歇 2017-09-28 02:49:34

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()函数。

想挽留 2017-09-26 03:01:58

<?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个不重复的随机数

晚风撩人 2017-08-27 00:36:15

楼上的方法,对于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空间)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文