对于安全部门,我需要创建一个不断变化的字符串。从数组中选择随机的东西:
$arr = array ('asfsdg','t3hbwed','gwefa@','43fsd4');
$string = $arr[array_rand($arr)];
但是没有数组(因为数组项的数量有限),我需要生成一个尚未定义的字符串。换句话说,如何生成一个重复可能性太低的字符串。
例如:使用'a', 'b'
,我们可以生成2 * 3 = 6种模式
a, b, ab, ba, aa, bb
例如:使用'a', 'b', '1'
,我们可以生成3 * 3 * 3 = 27种模式
a, b, 1, ab1, 1ab, ba1, etc ...
现在我想创建一个系统来生成一个字符串,该字符串是(例如) 'a', 'b', 'c', 'd, '1', '2', '@', '#'
的结果之一。此外,系统每次都会随机生成一个字符串。这样的事情:
1ad@cb2#
修改
我已经问过这个问题: How to prevent crawlers depending on XPath from getting pages contents
现在我想为我的班级创建班级名称。
答案 0 :(得分:0)
您可以通过连接date('Ymdhis')
生成始终唯一的字符串。您可能已经知道,每次运行时都会给您一个唯一的编号。
为了更加准确,您可以在之前或之后连接字母表。此外,您可以使用PHP加密函数对其进行加密。
仅举例示例。为了说明我想说的话: -
<?php
echo 's'.date('Ymdhis').'<br>';
echo 's'.time('his');
?>
答案 1 :(得分:0)
如果您只想要一个随机字符串,这里是我用来生成验证电子邮件令牌的函数。您只需调用它并定义您希望字符串的长度。您可以在$ alphanum数组中添加其他字符以包含大写字母或特殊字符。
function getToken($length = 10) {
$alphanum = str_split('abcdefghijklmnopqrstuvwxyz0123456789-_',1);
$token = '';
while (strlen($token) <= $length) {
$token .= $alphanum[array_rand($alphanum)];
}
return $token;
}
将其链接以返回多个标记的数组(默认值为3,并且所有标记都将被检查为唯一标记):
function getTokens($length = 10, $count = 3) {
$alphanum = str_split('abcdefghijklmnopqrstuvwxyz0123456789-_',1);
$output = array();
while (count($output) <= $count) {
$token = '';
while (strlen($token) <= $length) {
$token .= $alphanum[array_rand($alphanum)];
}
if (!in_array($output,$token)) {
$output[] = $token;
}
}
return $output;
}
答案 2 :(得分:0)
出于安全考虑,请勿使用uniqid()。相反,你可以使用 openssl_random_pseudo_bytes()
如果你想要一个看起来像十六进制字符串的东西,你可以写
bin2hex(openssl_random_pseudo_bytes(256))
将输出例如
49f82a54d8015699bef300c7e6e2f9307b235def885c88d35b4251dc3a6033e9d4560ff241c7afdb5a409cb267f4ee1455930381c018fd52515266f1b85ea618362355c878070509909b46af6d0338ba550a2308183fcac9e64ea87c7e3d0cf68cd9e0ebd1bb6aaf1f78fd9ee38083c32131354ed3585ad2fde8d101ddfd021e0d97ef9da0739ad92ac7cf50ae77aae408939fe84009a1e856e3bc68aeeca7908f5d8686187d712a1c0995cba63fb77ded7d9767dddd056bfba550a24235b78e26e8447a537cd426dd923649f2c293f6cf07154aae599dda07b6814c3c842acc15be33ea20b4dcfde543f2849261d5b44ed5d4c102043c0b26f00e55d17f0622