php使用字母和数字生成随机字符串

时间:2018-05-08 20:05:16

标签: php

如何在PHP中生成10个字符的随机字符串,包括大写字母和数字,这些字母永远不会重复或者重复的可能性最小?例如:34KJ2SCFPS

如果我只考虑数字,那么$randon = time();可以复制吗?随着时间的推移每毫秒我都不会这样做。还有,有机会吗?

4 个答案:

答案 0 :(得分:2)

使用以下代码。

对于数字和字符

$length = 10;    
echo substr(str_shuffle('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'),1,$length);

仅限字符

$length = 10;    
echo substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ'),1,$length);

仅限数字

$length = 10;    
echo substr(str_shuffle('0123456789'),1,$length);

答案 1 :(得分:1)

您可以使用此代码(从CodeIgniter中的String helper复制)

/**
     * Create a "Random" String
     *
     * @param   string  type of random string.  basic, alpha, alnum, numeric, nozero, unique, md5, encrypt and sha1
     * @param   int number of characters
     * @return  string
     */
    function random_string($type = 'alnum', $len = 8)
    {
        switch ($type)
        {
            case 'basic':
                return mt_rand();
            case 'alnum':
            case 'numeric':
            case 'nozero':
            case 'alpha':
                switch ($type)
                {
                    case 'alpha':
                        $pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                        break;
                    case 'alnum':
                        $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                        break;
                    case 'numeric':
                        $pool = '0123456789';
                        break;
                    case 'nozero':
                        $pool = '123456789';
                        break;
                }
                return substr(str_shuffle(str_repeat($pool, ceil($len / strlen($pool)))), 0, $len);
            case 'md5':
                return md5(uniqid(mt_rand()));
            case 'sha1':
                return sha1(uniqid(mt_rand(), TRUE));
        }
    }

此:

echo random_string('alnum', 10);

会产生类似于预期结果的内容。

答案 2 :(得分:0)

我使用它(在Model类中),但是主体是相同的

 /**
     * UUID - generateds an SQL type unique identifier
     */public static function UUID()
    {
        return sha1(crypt(uniqid(), random_int(1000000, 9999999)));
    }

答案 3 :(得分:0)

如果不是为了安全,你可以只用md5 time()或microtime()

$rand = md5(microtime())

你会得到一个32字符的字符串,它看起来是随机的,不应该重复。