为了在电子商务网站上生成一个好看的随机优惠码,我希望它能比通常的随机码更好看。它应该是可读的优惠码,全部由大写字母和数字(A-Z、0-9)组成,不含任何特殊字符。由于人们可能需要在其他地方将其阅读或打印出来,因此我们需要将其设计为易于传达的值,长度可能为8-10个字符。例如:
AHS3DJ6BW
B83JS1HSK
(这是我打的,所以它并不是完全随机的)
$chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$res = "";
for ($i = 0; $i < 10; $i++) {
$res .= $chars[mt_rand(0, strlen($chars)-1)];
}
你可以通过预先分配$res
字符串和缓存strlen($chars)-1
的结果来进行优化。由于你可能不会每秒生成成千上万个礼券,因此这留给读者作为练习。试试这个:
substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 10)
strtoupper
函数。 - Gumbo<?php
echo strtoupper(uniqid());
?>
您可以使用优惠券代码生成器PHP类文件来生成N个优惠券,它是可定制的,并且具有添加自己的前缀和后缀的各种选项。 简单的 PHP 优惠券代码生成器
例如:coupon::generate(8); // J5BST6NQ
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
}
CX00019 QZ0001C
CX0001A QZ0001D
CX0001B QZ0001E
或者,您甚至可以在优惠券中使用字典单词,因为这样的优惠码更容易记忆,用户输入速度更快。像Dreamhost这样的公司就会使用这些促销代码,例如:
Promo60
NoSetupFee
YELLOWGORILLA82
$size = 12;
$string = strtoupper(substr(md5(time().rand(10000,99999)), 0, $size));
只要写就好了
$voucher_no = date('ymd') . rand(1000, 9999);
while(SapItem::where('voucher_no', $voucher_no)->exists()){
$voucher_no = date('ymd') . rand(1000, 9999);
}
输出:2204171447
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;
?>
I
、1
、O
和0
。 - Joey