对于电子商务网站,我想生成一个随机优惠券代码,该代码看起来比随机生成的价值更好。它应该是一个可读的优惠券代码,全部为大写,没有特殊字符,只有字母(A-Z)和数字(0-9)。
由于人们可能正在阅读/在其他地方将其打印出来,我们需要将其设为一个简单的通信值,也许是8到10个字符。
或许像是,
AHS3DJ6BW
B83JS1HSK
(我打字,所以它不是那么随意)
答案 0 :(得分:40)
$chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$res = "";
for ($i = 0; $i < 10; $i++) {
$res .= $chars[mt_rand(0, strlen($chars)-1)];
}
您可以通过预先分配$res
字符串并缓存strlen($chars)-1
的结果来优化此操作。这是留给读者的练习,因为你可能不会每秒产生数千张优惠券。
答案 1 :(得分:20)
试试这个:
substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 10)
答案 2 :(得分:4)
您可以使用优惠券代码生成器PHP类文件生成N个优惠券及其可自定义,具有添加自己的掩码和自己的前缀和后缀的各种选项。 Simple PHP coupon code generator
实施例:
coupon::generate(8); // J5BST6NQ
答案 3 :(得分:1)
http://webarto.com/35/php-random-string-generator
你走了。
function randr($j = 8){
$string = "";
for($i=0;$i < $j;$i++){
srand((double)microtime()*1234567);
$x = mt_rand(0,2);
switch($x){
case 0:$string.= chr(mt_rand(97,122));break;
case 1:$string.= chr(mt_rand(65,90));break;
case 2:$string.= chr(mt_rand(48,57));break;
}
}
return strtoupper($string); //to uppercase
}
答案 4 :(得分:1)
为什么不保持简单?
<?php
echo strtoupper(uniqid());
?>
始终返回13个字符长的大写随机码。
答案 5 :(得分:1)
如果没有这些安全要求,那么您实际上并不需要随机生成的代码。我只会使用增量ID,例如您使用的任何RDBMS生成的ID。或者,如果您有不同类型的优惠券,您可以在代码前加上一些内容,例如:
CX00019 QZ0001C
CX0001A QZ0001D
CX0001B QZ0001E
或者,您甚至可以在优惠券中使用字典单词,因为这样的优惠券代码更容易记住,并且用户输入更快。 Dreamhost等公司将这些用于促销代码,例如:
Promo60
NoSetupFee
YELLOWGORILLA82
其中一些显然是人为创建的(您可能希望选择),但也可以使用字典列表生成它们。但即使它们是随机生成的无意义短语,字符遵循逻辑模式的事实仍然使其比R7QZ8A92F1
更加用户友好。所以我强烈建议不要使用后一种类型的优惠券代码,因为它们“看起来很酷”。您的客户会感谢您。
答案 6 :(得分:0)
function generateCouponCode($length = 8) {
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$ret = '';
for($i = 0; $i < $length; ++$i) {
$random = str_shuffle($chars);
$ret .= $random[0];
}
return $ret;
}
答案 7 :(得分:0)
你可以在php rand手册中找到很多功能 http://php.net/manual/en/function.rand.php
我喜欢这个
<?php
//To Pull 8 Unique Random Values Out Of AlphaNumeric
//removed number 0, capital o, number 1 and small L
//Total: keys = 32, elements = 33
$characters = array(
"A","B","C","D","E","F","G","H","J","K","L","M",
"N","P","Q","R","S","T","U","V","W","X","Y","Z",
"1","2","3","4","5","6","7","8","9");
//make an "empty container" or array for our keys
$keys = array();
//first count of $keys is empty so "1", remaining count is 1-7 = total 8 times
while(count($keys) < 8) {
//"0" because we use this to FIND ARRAY KEYS which has a 0 value
//"-1" because were only concerned of number of keys which is 32 not 33
//count($characters) = 33
$x = mt_rand(0, count($characters)-1);
if(!in_array($x, $keys)) {
$keys[] = $x;
}
}
foreach($keys as $key){
$random_chars .= $characters[$key];
}
echo $random_chars;
?>
答案 8 :(得分:0)
$length = 9;
$code = (strtoupper(substr(md5(time()), 0, $length)));
答案 9 :(得分:0)
$size = 12;
$string = strtoupper(substr(md5(time().rand(10000,99999)), 0, $size));