如何可能生成一个随机的,唯一的字符串使用数字和字母用于验证链接?就像你在一个网站上创建了一个账户,它会给你发一封带有链接的电子邮件,你必须点击那个链接才能验证你的账户

如何使用PHP生成其中一个?


当前回答

这是一个简单的函数,允许您生成包含字母和数字(字母和数字)的随机字符串。还可以限制字符串长度。 这些随机字符串可用于各种目的,包括:推荐代码,促销代码,优惠券代码。 函数依赖于以下PHP函数: Base_convert, sha1, uniqid, mt_rand

function random_code($length)
{
  return substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, $length);
}

echo random_code(6);

/*sample output
* a7d9e8
* 3klo93
*/

其他回答

我认为这是最好的方法。

str_shuffle(md5(rand(0,100000)))

生成一个随机数使用 你最喜欢的随机数 发电机 乘除 得到一个与数字匹配的数字 你的代码字母表中的字符 将该索引处的项插入 你的代码字母。 重复1),直到你有你想要的长度 想要

例如(伪代码)

int myInt = random(0, numcharacters)
char[] codealphabet = 'ABCDEF12345'
char random = codealphabet[i]
repeat until long enough

安全注意:在随机性质量可能影响应用程序安全性的情况下,不应使用此解决方案。特别是,rand()和uniqid()不是加密安全的随机数生成器。关于安全的替代方案,请参阅Scott的回答。

如果你不需要它随着时间的推移是绝对唯一的:

md5 (uniqid (rand()、true))

否则(假设你已经为你的用户确定了一个唯一的登录):

md5(uniqid($your_user_login, true))

在阅读了之前的例子后,我得出了以下结论:

protected static $nonce_length = 32;

public static function getNonce()
{
    $chars = array();
    for ($i = 0; $i < 10; $i++)
        $chars = array_merge($chars, range(0, 9), range('A', 'Z'));
    shuffle($chars);
    $start = mt_rand(0, count($chars) - self::$nonce_length);
    return substr(join('', $chars), $start, self::$nonce_length);
}

我复制了10倍的数组[0-9,a - z]和洗牌的元素,在我得到一个随机的起始点substr()更“创造性”:) 你可以添加[a-z]和其他元素到数组中,或多或少地复制,比我更有创造力

这是我在我的一个项目上使用的,它工作得很好,它生成了一个唯一的随机TOKEN:

$timestampz=time();

function generateRandomString($length = 60) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}


$tokenparta = generateRandomString();


$token = $timestampz*3 . $tokenparta;

echo $token;

请注意,我将时间戳乘以3,以引起用户的困惑,他们可能想知道这个令牌是如何生成的;)

我希望它能帮助你:)