Для сайта электронной коммерции я хочу создать случайный код купона, который выглядит лучше, чем случайно генерируемое значение. Он должен быть читаемым кодом купона, все в верхнем регистре без специальных символов, только буквы (AZ) и цифры (0-9).
Поскольку люди могут читать это / печатать его в другом месте, мы должны сделать это простым для обмена значением, а возможно, длиной 8-10 символов.
Что-то вроде,
AHS3DJ6BW B83JS1HSK
(Я набрал это, так что на самом деле это не случайно)
$chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $res = ""; for ($i = 0; $i < 10; $i++) { $res .= $chars[mt_rand(0, strlen($chars)-1)]; }
Вы можете оптимизировать это путем preallocating строки $res
и кэширования результата strlen($chars)-1
. Это остается как упражнение для читателя, поскольку, вероятно, вы не будете генерировать тысячи купонов в секунду.
Попробуй это:
substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 10)
Вы можете использовать генератор кода купона PHP-файла, чтобы генерировать N количество купонов и его настраиваемый, с различными вариантами добавления собственной маски с собственным префиксом и суффикс. Простой генератор кода купона PHP
Пример: coupon::generate(8); // J5BST6NQ
coupon::generate(8); // J5BST6NQ
Почему бы не сохранить его простым?
<?php echo strtoupper(uniqid()); ?>
Всегда возвращает 13-символьный длинный случайный код в верхнем регистре.
Если для них нет требований безопасности, то вам действительно не нужны случайные коды. Я бы просто использовал инкрементные идентификаторы, такие как те, которые генерируются любой используемой СУБД. При желании, если у вас есть разные типы купонов, вы можете прикрепить коды к чему-то, например:
CX00019 QZ0001C CX0001A QZ0001D CX0001B QZ0001E
Альтернативно, вы можете даже использовать словарные слова в купоне, так как такие коды купонов легче запоминать и быстрее для пользователей вводить. Такие компании, как Dreamhost, используют их для своих промо-кодов, например:
Promo60 NoSetupFee YELLOWGORILLA82
Некоторые из них, очевидно, созданы человеком (для чего вы, возможно, захотите иметь возможность), но они также могут быть сгенерированы с использованием списка словарей. Но даже если они представляют собой беспорядочные фразы, генерируемые случайным образом, тот факт, что символы следуют логическому шаблону, по-прежнему делает его более удобным для пользователя, чем что-то вроде R7QZ8A92F1
. Поэтому я настоятельно рекомендую использовать коды купонов последнего типа только на том основании, что они «выглядят круто». Ваши клиенты будут благодарны вам.
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 }
function generateCouponCode($length = 8) { $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $ret = ''; for($i = 0; $i < $length; ++$i) { $random = str_shuffle($chars); $ret .= $random[0]; } return $ret; }
вы можете найти много функций в руководстве 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; ?>
$length = 9; $code = (strtoupper(substr(md5(time()), 0, $length)));
$size = 12; $string = strtoupper(substr(md5(time().rand(10000,99999)), 0, $size));