我需要在每个表单提交上生成一个随机的4个字符的字符串。我从here得到了这个解决方案。
就是这个。
function genTicketString() {
return substr(md5(uniqid(mt_rand(), true)), 0, 4);
}
add_shortcode('quoteticket', 'genTicketString');
但这主要产生一个类似的ID!可能如果我可以添加日期&时间以及4个字符,它将修复它。
那我怎样才能添加数据&生成字符串的时间?
答案 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;
}
注意:这会生成一个伪随机字符串,无法确定该字符串是唯一的。
首先,你应该使用一个更长的字符串: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');