如何生成动态字符串

时间:2015-06-02 09:24:24

标签: php string

对于安全部门,我需要创建一个不断变化的字符串。从数组中选择随机的东西:

$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

现在我想为我的班级创建班级名称。

3 个答案:

答案 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