【发布时间】:2017-09-09 12:12:57
【问题描述】:
我正在尝试生成任何长度的随机数,我想制作产品 ID 和订单 ID。但是这里的问题是,当我创建新项目时,它给出了 id 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
【问题讨论】:
-
pow(10,11)超过 32 位数字 -
2147483647是一个你应该学会识别的神奇数字;它是 32 位 PHP 的最大有符号整数值 -
@MarkBaker 请帮助修复它,我是 php 新手,我现在能做的只是我不知道那个神奇的数字
-
oid 值应该返回什么字符?您似乎是在定义“掩码”而不是“键空间”,即有效字符列表.... 将键空间简单地设置为有效字符列表可能更好,然后执行您可能想要的任何特殊格式生成随机值
-
@MarkBaker for
oid我想使用当前日期和时间,然后在末尾添加随机数date("Ymd").time()4488765。请帮我以正确的方式修复它,我将有时间查看并了解更多信息