Wordpress:在表单提交时生成唯一ID

时间:2017-01-17 16:30:03

标签: php wordpress plugins

我需要在每个表单提交上生成一个随机的4个字符的字符串。我从here得到了这个解决方案。

就是这个。

 function genTicketString() {
 return substr(md5(uniqid(mt_rand(), true)), 0, 4);
 }
 add_shortcode('quoteticket', 'genTicketString');

但这主要产生一个类似的ID!可能如果我可以添加日期&时间以及4个字符,它将修复它。

那我怎样才能添加数据&生成字符串的时间?

2 个答案:

答案 0 :(得分:1)

直接回答您的问题

要生成伪随机字符串,您可以使用此功能:

function getPseudoRandomString($length = 4) {
    $base64Chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/';
    $result = '';

    for ($i = 0; $i < $length; ++$i) {
        $result .= $base64Chars[mt_rand(0, strlen($base64Chars) - 1)];
    }

    return $result;
}

注意:这会生成一个伪随机字符串,无法确定该字符串是唯一的。

获得更独特的&#34;串

首先,你应该使用一个更长的字符串:4个字符非常小:只有1600个可能性,一组64个字符。

然后,如果要添加更多unicity,可以将随机生成的字符串与uniqid('', true) http://php.net/manual/en/function.uniqid.php

的结果连接起来

确保从未生成字符串

确保从未生成字符串的唯一方法是将所有生成的字符串保存在数据库中,并在生成新字符串时,必须检查数据库中是否已存在该字符串以生成新字符串如果需要的话。

生成器功能看起来像

function generateUniqueString()
    do {
        $string = generateString();
    while (is_in_database($string));

    save_in_database($string);
    return $string;
}

答案 1 :(得分:0)

我使用this answer而不做任何修改

function genTicketString() {
$d=date ("d");
$m=date ("m");
$y=date ("Y");
$t=time();
$dmt=$d+$m+$y+$t;    
$ran= rand(0,10000000);
$dmtran= $dmt+$ran;
$un=  uniqid();
$dmtun = $dmt.$un;
$mdun = md5($dmtran.$un);
$sort=substr($mdun, 0, 6); // if you want sort length code.
$sort=strtoupper($sort);
return $sort;
}
add_shortcode('quoteticket', 'genTicketString');