PHP-код для генерации прилично выглядящих кодов купонов (сочетание букв и цифр)

Для сайта электронной коммерции я хочу создать случайный код купона, который выглядит лучше, чем случайно сгенерированное значение. Это должен быть читаемый код купона, все в верхнем регистре без специальных символов, только буквы (AZ) и цифры (0-9).

Так как люди могут читать это или распечатывать в другом месте, мы должны сделать это значение для простого общения, возможно, длиной 8-10 символов.

Что-то вроде, возможно,

AHS3DJ6BW 
B83JS1HSK

(я набрал это, так что ' не так уж и случайно)

13
задан Peter O. 27 July 2017 в 07:07
поделиться

8 ответов

$chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$res = "";
for ($i = 0; $i < 10; $i++) {
    $res .= $chars[mt_rand(0, strlen($chars)-1)];
}

Вы можете оптимизировать это, предварительно выделив строку $ res и кэшируя результат strlen ($ chars) -1 . Это оставлено читателю в качестве упражнения, поскольку, вероятно, вы не будете генерировать тысячи купонов в секунду.

41
ответ дан 1 December 2019 в 17:15
поделиться

вы можете найти много функций в руководстве по 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;
?>
0
ответ дан 1 December 2019 в 17:15
поделиться

Попробуйте следующее:

substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 10)
20
ответ дан 1 December 2019 в 17:15
поделиться

Почему бы не сделать это проще?

<?php
    echo strtoupper(uniqid());
?>

Всегда возвращает 13-символьный случайный код в верхнем регистре.

3
ответ дан 1 December 2019 в 17:15
поделиться

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
}
1
ответ дан 1 December 2019 в 17:15
поделиться
function generateCouponCode($length = 8) {
  $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $ret = '';
  for($i = 0; $i < $length; ++$i) {
    $random = str_shuffle($chars);
    $ret .= $random[0];
  }
  return $ret;
}
0
ответ дан 1 December 2019 в 17:15
поделиться

Если нет требований к безопасности, то вам не нужны случайно генерируемые коды. Я бы просто использовал инкрементные идентификаторы, например, генерируемые любой используемой вами СУБД. Как вариант, если у вас есть разные типы купонов, вы можете префикснуть коды чем-нибудь, например:

CX00019 QZ0001C
CX0001A QZ0001D
CX0001B QZ0001E

Как вариант, вы можете даже использовать словарные слова в купоне, так как такие коды купонов легче запоминаются и быстрее набираются пользователями. Такие компании, как Dreamhost, используют их для своих промо-кодов, например:

Promo60
NoSetupFee
YELLOWGORILLA82

Некоторые из них, очевидно, создаются человеком (что вы, возможно, захотите сделать), но они также могут быть сгенерированы с помощью словарного списка. Но даже если это случайно сгенерированные бессмысленные фразы, тот факт, что символы следуют логической схеме, все равно делает их гораздо более удобными для пользователя, чем что-то вроде R7QZ8A92F1. Поэтому я бы настоятельно рекомендовал не использовать последний тип кодов купонов только на том основании, что они "круто выглядят". Ваши клиенты скажут вам спасибо.

1
ответ дан 1 December 2019 в 17:15
поделиться
$length = 9;
$code   = (strtoupper(substr(md5(time()), 0, $length)));
0
ответ дан 1 December 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: