在php中生成16个长度随机数的最佳方法是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在php中生成16个长度随机数的最佳方法是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1837字,纯文字阅读大概需要3分钟。
内容图文
我想在PHP中生成一个无重复且长度为16的随机数代码.
最好的方法是什么?
我使用此代码:
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 14) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
但这会产生1个随机数.我想要30000个随机数.我该怎么办 ?
我也使用此代码,但不会生成16长度:
<?php
$con=mysqli_connect("localhost","root","","test1");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysql_connect_error();
}
for ($s=0;$s<10;$s++) {
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 16) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
echo nl2br("$code <br/>");
mysqli_query($con,"INSERT INTO test (ID, Code, Type, Used)
VALUES ('', '".$code."','1', '0')");
}
for ($s=0;$s<10;$s++) {
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 16) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
echo nl2br("$code <br/>");
mysqli_query($con,"INSERT INTO test (ID, Code, Type, Used)
VALUES ('', '".$code."','2', '0')");
}
for ($s=0;$s<10;$s++) {
$possible = '0123456789';
$code = '';
$i = 0;
while ($i < 16) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
echo($code);
echo nl2br("$code <br/>");
mysqli_query($con,"INSERT INTO test (ID, Code, Type, Used)
VALUES ('', '".$code."','3', '0')");
}
mysqli_close($con);
?>
解决方法:
不含重复数字的代码段:
$len=14;
$last=-1;
for ($i=0;$i<$len;$i++)
{
do
{
$next_digit=mt_rand(0,9);
}
while ($next_digit == $last);
$last=$next_digit;
$code.=$next_digit;
}
30000内没有重复的代码段(但允许重复数字):
$codes=array();
while (count($codes) < 30000)
{
$code=rand(pow(10,13),pow(10,14)-1);
$codes["$code"]=1;
}
代码存储为阵列的键(只是为了节省一些内存).
对于此问题,可能会有更好的解决方案(尤其是效率更高的解决方案)-但实际上这很短;-)-由于Kolink解决方案的集成.
希望能有所帮助.
*约
内容总结
以上是互联网集市为您收集整理的在php中生成16个长度随机数的最佳方法是什么?全部内容,希望文章能够帮你解决在php中生成16个长度随机数的最佳方法是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。