用于生成体面的优惠券代码的PHP代码(字母和数字的混合)

时间:2010-08-19 12:13:54

标签: php random

对于电子商务网站,我想生成一个随机优惠券代码,该代码看起来比随机生成的价值更好。它应该是一个可读的优惠券代码,全部为大写,没有特殊字符,只有字母(A-Z)和数字(0-9)。

由于人们可能正在阅读/在其他地方将其打印出来,我们需要将其设为一个简单的通信值,也许是8到10个字符。

或许像是,

AHS3DJ6BW 
B83JS1HSK

(我打字,所以它不是那么随意)

10 个答案:

答案 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));