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

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


当前回答

以下是我使用的方法:

md5(time() . rand());    
// Creates something like 0c947c3b1047334f5bb8a3b7adc1d97b

其他回答

我在这里提供了一些很好的研究数据,基于斯科特的答案提供的功能。因此,我为这个为期5天的自动化测试设置了一个数字海洋液滴,并将生成的唯一字符串存储在MySQL数据库中。

在这个测试期间,我使用了5个不同的长度(5、10、15、20、50),每个长度插入+/- 50万条记录。在我的测试中,在50万个重复中,只有长度5产生了+/-3K个重复,其余长度没有产生任何重复。所以我们可以说,如果我们使用Scott函数的长度为15或以上,那么我们就可以生成高度可靠的唯一字符串。以下是我的研究数据:

更新

我使用这些函数创建了一个简单的Heroku应用程序,它将令牌作为JSON响应返回。该应用程序可以在https://uniquestrings.herokuapp.com/api/token?length=15上访问

这是我在我的一个项目上使用的,它工作得很好,它生成了一个唯一的随机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,以引起用户的困惑,他们可能想知道这个令牌是如何生成的;)

我希望它能帮助你:)

这是一个有趣的问题

public function randomStr($length = 16) {
    $string = '';
        
    while (($len = strlen($string)) < $length) {
        $size = $length - $len;
            
        $bytes = random_bytes($size);
            
        $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
    }
        
        return $string;
}

从laravel偷来的

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

例如(伪代码)

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

您可以使用UUID(universal Unique Identifier),它可以用于任何目的,从用户身份验证字符串到支付事务id。

UUID是一个16位(128位)的数字。在规范形式中,UUID由32个十六进制数字表示,以8-4-4-4-12的形式显示在5组中,共36个字符(32个字母数字字符和4个连字符)。

function generate_uuid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0C2f ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0x2Aff ), mt_rand( 0, 0xffD3 ), mt_rand( 0, 0xff4B )
    );

}

/ / calling funtion

$transationID = generate_uuid();

一些示例输出如下:

E302D66D-87E3-4450-8CB6-17531895BF14
22D288BC-7289-442B-BEEA-286777D559F2
51B4DE29-3B71-4FD2-9E6C-071703E1FF31
3777C8C6-9FF5-4C78-AAA2-08A47F555E81
54B91C72-2CF4-4501-A6E9-02A60DCBAE4C
60F75C7C-1AE3-417B-82C8-14D456542CD7
8DE0168D-01D3-4502-9E59-10D665CEBCB2

希望它能在将来帮助到别人:)