每次调用返回相同值的php随机数函数
我正在尝试生成任意长度的随机数,以生成产品id和订单id。但这里的问题是,当我创建新项目时,给定id的长度每次调用返回相同值的php随机数函数,php,for-loop,random,Php,For Loop,Random,我正在尝试生成任意长度的随机数,以生成产品id和订单id。但这里的问题是,当我创建新项目时,给定id的长度11,它将在不更改数字之前生成相同的id使用 这是我的php代码 <?php function EventRang($length = 10, $type){ switch($type){ case 'int': //$keyspace = mt_rand(10000000000, 99999999999).date("Ymd").rand();
11
,它将在不更改数字之前生成相同的id使用
这是我的php代码
<?php
function EventRang($length = 10, $type){
switch($type){
case 'int':
//$keyspace = mt_rand(10000000000, 99999999999).date("Ymd").rand();
$keyspace = str_pad(rand(0, pow(10, $length)-1), $length, '0', STR_PAD_LEFT);
break;
case 'char':
$keyspace = date('Fl').'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'str':
$keyspace = time().'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'oid':
//$keyspace = date("Ymd").time().rand().mt_rand(10000000000, 99999999999);
$keyspace = date("Ymd").time().str_pad(rand(0, pow(10, $length)-1), $length, '0', STR_PAD_LEFT);
break;
default:
$keyspace = time().'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
}
$charactersLength = strlen($keyspace);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $keyspace[rand(0, $charactersLength - 1)];
}
return $randomString;
}
?>
这始终是输出
2147483647
,因为有时答案需要明确
function EventRang($length = 10, $type = 'int') {
// Define the set of characters permitted for the random element for each type
switch($type) {
case 'int':
case 'oid':
$keyspace = '0123456789';
break;
case 'char':
$keyspace = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
break;
case 'str':
default:
$keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
}
// Generate the random characters/digits
$charactersLength = strlen($keyspace);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $keyspace[rand(0, $charactersLength - 1)];
}
// apply the masking
switch($type) {
case 'int':
return $randomString;
case 'char':
return date('Fl').$randomString;
break;
case 'str':
return time().$randomString;
break;
case 'oid':
return date("Ymd").time().$randomString;
break;
default:
return time().$randomString;
}
}
函数EventRang($length=10,$type='int'){
//定义每种类型的随机元素所允许的字符集
交换机($类型){
案例“int”:
案例“oid”:
$keyspace='0123456789';
打破
案例“char”:
$keyspace='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz';
打破
案例'str':
违约:
$keyspace='0123456789abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvwxyz';
}
//生成随机字符/数字
$charactersLength=strlen($keyspace);
$randomString='';
对于($i=0;$i<$length;$i++){
$randomString.=$keyspace[rand(0,$charactersLength-1)];
}
//应用遮罩
交换机($类型){
案例“int”:
返回$randomString;
案例“char”:
返回日期('Fl')。$randomString;
打破
案例'str':
返回时间().$randomString;
打破
案例“oid”:
返回日期(“Ymd”).time().$randomString;
打破
违约:
返回时间().$randomString;
}
}
您需要将掩蔽与键空间分开;keyspace只是用于输出的随机元素的字符集;如果您尝试将遮罩作为键空间的一部分应用,那么您只是扭曲了随机性,而没有应用遮罩
还要注意,函数定义也需要类型的默认值,因为它在参数列表中位于length之后,length有一个默认值
pow(10,11)
超过32位数字2147483647
是一个您应该学会识别的神奇数字;它是32位的最大有符号整数值PHP@MarkBaker请帮助修复它,我是php新手,现在我所能做的就是不知道这个神奇的数字oid值应该返回哪些字符?您似乎在定义“掩码”而不是“键空间”,即有效字符列表。。。。最好只将键空间设置为有效字符的列表,然后在生成随机字符后执行您可能需要的任何特殊格式value@MarkBaker对于oid
我想使用当前日期和时间,然后在日期(“Ymd”)末尾添加随机数。时间()4488765
。请帮助我以正确的方式修复它,我将有时间查看它并了解更多。int现在工作得很好,但其他的返回值超过给定值。我想我知道为什么,因为制作的原因,让我尝试修复它,如果值太长,那么在返回之前将其子串。。。。我不知道你是想要11个随机数字加上掩蔽,还是包括掩蔽,尽管我会说char
的日期掩蔽很奇怪;而oid
的值为11不会产生太大的变化,因为date(“Ymd”).time()
已经大于11