❶ php:如何生成随机的唯一字母数字字符串
1. 自己写代码产生随机的数字和字母组合,每产生1个去数据库查询该随机码是否已存在,如果已存在,则重新产生,直到不重复为止。
缺点:产生速度慢,还要查询数据库,当数据量大的时候,可能重复的机率会比较高,要查询多次数据库.
2. guid,该方法应该是用的比较多的。
优点:使用简单方便,不用自己编写额外的代码
缺点:占用数据库空间相对较大,特别是根据guid查询速度比较慢(毕竟是字符串)。
3. 主键+随机码的方式,我们产生的随机码保存到数据库肯定会有个主键,用该主键+随机字符来组合。产生步骤:
1) 先从id生成器中获取id,比如是155.
2)填充成固定位数(比如8位)的字符串(不够位数的左边填0,超过位数直接使用该数字),得到:00000155
3)在每个数字后面随机插入1个字母或其它非数字符号,得到:0A0F0R0Y0H1K5L5M
这样就可以得到1个随机的唯一的邀请码了。
优点:使用也比较简单,不用查询数据库。最大的优点是查询的时候,可以根据邀请码直接得到主键id,然后根据id去数据库查询(速度很快),再比较查询出来的邀请码和用户提交的邀请码是否一致。
缺点:需要使用id产生器,如果主键是数据库自增长的就不太好用(需要先插入数据库获取id,再更新邀请码)。
4. 有时候产品经理说,我要求邀请码都是数字的。把方法3变通下就可以实现唯一的纯数字随机码了。
1) 获取id: 155
2) 转换成8进制:233
3) 转为字符串,并在后面加'9'字符:2339
4)在后面随机产生若干个随机数字字符:2003967524987
转为8进制后就不会出现9这个字符,然后在后面加个'9',这样就能确定唯一性。最后在后面产生一些随机数字就可以。
❷ php如何生成随机字符串
方法一
1、在33
–
126中生成一个随机整数,如35。
2、将35转换成对应的ASCII码字符,如35对应#。
3、重复以上1、2步骤n次,连接成n位的密码。
方法二
1、预置一个的字符串
$chars
,包括
a
–
z,A
–
Z,0
–
9,以及一些特殊字符。
2、在
$chars
字符串中随机取一个字符。
3、重复第二步n次,可得长度为n的密码。
方法三
1、预置一个的字符数组
$chars
,包括
a
–
z,A
–
Z,0
–
9,以及一些特殊字符。
2、通过array_rand()从数组$chars中随机选出$length个元素。
3、根据已获取的键名数组
$keys,从数组$chars取出字符拼接字符串。该方法的缺点是相同的字符不会重复取。
❸ PHP 随机文字不重复 要从几十个之间随机让他显示8个 这8个彼此不重复 该怎么修改 以下代码能随机但是重复
楼上的思路没错
或者你可以这样
每次循环把$output放到一个数组里边 然后判断此数组里边是否存在相同的值
如果存在就继续循环产生随机数 如果不存在就放入到数组里边
最后 生成不同的4个以后 你可以把数组编程字符串就可以了
❹ PHP基于自增数据如何生成不重复的随机数示例
1、 $base 基数组 如果是8位这个数组必须是8位
2、 $i 自增数,自增数不能超过8位数
当前简单分析的结果就是以上。大家如果是全局不重复,还是建议使用uuid之类的比较合适。
❺ php生成不重复随机数、数组的4种方法分享
下面写几种生成不重复随机数的方法,直接上代码吧
复制代码
代码如下:
<?php
define('RANDOM_MAX',
100);
define('COUNT',
10);
echo
'max
random
num:
'.RANDOM_MAX,
'
;result
count:'.COUNT,
'<br/>';
invoke_entry('rand1');
invoke_entry('rand2');
invoke_entry('rand3');
invoke_entry('rand4');
function
invoke_entry($func_name)
{
$time
=
new
time();
$time->time_start();
call_user_func($func_name);
echo
$func_name.'
time
spend:
',
$time->time_spend();
echo
'<br/>';
}
function
rand1()
{
$numbers
=
range
(1,
RANDOM_MAX);
shuffle($numbers); //随机打乱数组
$result
=
array_slice($numbers,
1,
COUNT);
return
$result;
}
function
rand2()
{
$result
=
array();
while(count($result)<
COUNT)
{
$result[]
=
mt_rand(1,
RANDOM_MAX); //mt_rand()是比rand()更好更快的随机函数
$result
=
array_unique($result);
//删除数组中重复的元素
}
return
$result;
}
function
rand3()
{
$result
=
array();
while(count($result)
<
COUNT)
{
$_tmp
=
mt_rand(1,
RANDOM_MAX);
if(!in_array($_tmp,
$result))
{ //当数组中不存在相同的元素时,才允许插入
$result[]
=
$_tmp;
}
}
return
$result;
}
function
rand4()
{
$result
=
array();
while
(count($result)
<
COUNT)
{
$result[]
=
mt_rand(1,
RANDOM_MAX);
$result
=
array_flip(array_flip($result)); //array_flip将数组的key和value交换
}
return
$result;
}
class
time
{
private
$_start;
public
function
time_start()
{
$this->_start
=
$this->microtime_float();
}
public
function
time_spend()
{
return
$this->microtime_float()
-
$this->_start;
}
private
function
microtime_float()
{
list($usec,
$sec)
=
explode("
",
microtime());
return
((float)$usec
+
(float)$sec);
}
}
?>
❻ php怎么生成6位的不重复的字符串
php生成6位不重复的字符串,用到的工具:notepad++,步骤如下:
php代码部分:
<?php
echo"刷新输出不同的六个字符组合:".substr(md5(microtime(true)),0,6);
?>
说明:此函数先获取当前时间,然后通过md5进行加密,然后再通过substr截取六位数,当前时间是不会重复的,从而保证生成的六个字符串永远不会重复。
效果图:
注意事项:此代码必须在php环境下运行。
❼ PHP编程,让循环随机不重复
<?php
$arr=array();
for($i=0;$i<=10;$i++){
$arr[]
=
$i;
}
shuffle($arr);//打乱(随机排列单元的顺序)一个数组
print_r($arr);
?>
这样打乱的数值就已经在数组里了,可以很方便的调用、
❽ 求PHP语言随机自动生成不重复的数字
//$count 随机码长度
function mrand($count){
$code = '';
for($i=0;$i<$count;$i++){
$code .= mt_rand(0,9);
}
return $code;
}
你还可以在这基础上扩展,变成还可以选择随机码类型
//生成不重复数字
function gettmp($count){
$temp = aray();
$code = mrand(3);
$i = 0;
while($i < $count){
if(!in_array($code,$temp)){
$temp[] = $code;
$i = $i + 1;
}
}
return $temp;
}
❾ php怎样生成一个32位的随机字符串
php生成32位不重复的随机数,代码如下:
functiongetRandom($param){
$str="";
$key="";
for($i=0;$i<$param;$i++)
{
$key.=$str{mt_rand(0,32)};//生成php随机数
}
return$key;
}
调用:getRandom(32)
输出结果:一个32位随机数
❿ PHP产生不重复随机数的5个方法总结
无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地。在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下(ps:方法1、4、5是我常用的,其余来自网络整理)
方法一:
复制代码
代码如下:
<?php
$numbers
=
range
(1,50);
//shuffle
将数组顺序随即打乱
shuffle
($numbers);
//array_slice
取该数组中的某一段
$num=6;
$result
=
array_slice($numbers,0,$num);
print_r($result);
?>
方法二:
复制代码
代码如下:
<?php
$numbers
=
range
(1,20);
//播下随机数发生器种子,可有可无,测试后对结果没有影响
srand
((float)microtime()*1000000);
shuffle
($numbers);
//跳过list第一个值(保存的是索引)
while
(list(,
$number)
=
each
($numbers))
{
echo
"$number
";
}
?>
方法三:
复制代码
代码如下:
<?php
function
NoRand($begin=0,$end=20,$limit=5){
$rand_array=range($begin,$end);
shuffle($rand_array);//调用现成的数组随机排列函数
return
array_slice($rand_array,0,$limit);//截取前$limit个
}
print_r(NoRand());
?>
上述可以在1-20间随机产生5个不重复的值
方法四:
复制代码
代码如下:
<?php
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
?>
方法五:
复制代码
代码如下:
<?php
$tmp
=
range(1,30);
print_r(array_rand($tmp,10));
?>
这个可能是比叫简单的了(ps:如果在range中指定了步长,就必须注意array_rand的第二个参数是否超出$tmp的长度)。
PHP提供非常丰富的数组函数,产生随机数大多可以从数组这个角度出发,若你还有方法提供,欢迎给出,文章将持续更新。