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

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

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

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

AHS3DJ6BW 
B83JS1HSK

(Я набрал это, так что на самом деле это не так)

Ответ 1

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

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

Ответ 2

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

substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 10)

Ответ 3

Вы можете использовать генератор кода купона PHP файла для генерации N числа купонов и его настраиваемых параметров с различными вариантами добавления собственной маски с собственным префиксом и суффиксом. Простой генератор кода купона PHP

Пример:  coupon::generate(8); // J5BST6NQ

Ответ 4

Почему бы не сохранить его простым?

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

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

Ответ 5

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

CX00019 QZ0001C
CX0001A QZ0001D
CX0001B QZ0001E

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

Promo60
NoSetupFee
YELLOWGORILLA82

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

Ответ 6

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
}

Ответ 7

function generateCouponCode($length = 8) {
  $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  $ret = '';
  for($i = 0; $i < $length; ++$i) {
    $random = str_shuffle($chars);
    $ret .= $random[0];
  }
  return $ret;
}

Ответ 8

вы можете найти много функций в справочнике 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;
?>

Ответ 9

$length = 9;
$code   = (strtoupper(substr(md5(time()), 0, $length)));

Ответ 10

$size = 12;

$string = strtoupper(substr(md5(time().rand(10000,99999)), 0, $size));