卡券的生成
需求:账号数字12位,密码数字8位
利用Unix时间戳的微妙数作为前8位,后四位随机生成
public function createCard()
{
$s = microtime();
$number = substr($s,2,8);
$amount=100;
for ($i=1;$i<=500;$i++){
$data = array(
'coupon_amount'=>$amount, 'coupon_number'=>$number.rand(1000,9999), 'coupon_pwd'=>rand(1000,9999).rand(1000,9999)
);
Db::name('coupon_number')->insert($data);
}
}
优化方法
public function createCard()
{
$s = microtime();
$number = substr($s,2,8);
$amount=100;
$arr=[];
for ($i=1;$i<=500;$i++){
$data = array(
'coupon_amount'=>$amount, 'coupon_number'=>$number.rand(1000,9999), 'coupon_pwd'=>rand(1000,9999).rand(1000,9999)
);
array_push($arr,$data);
}
dump($arr);
Db::name('coupon_number')->insertAll($arr);
}
检查账号密码完全重复的数据
select count(*) as num,group_concat(coupon_pwd) from fcxlt_coupon_card group by coupon_number order by num desc;
经检查发下coupon_number有重复的,密码没有重复的,虽说可以用,但是让人不是很放心。于是用下面方法,无重复
truncate table fcxlt_coupon_card;清空数据并ID从1开始
这样生成后,无重复:
public function createCardlist()
{
$arr=[];
$amount=100;
for ($i=1;$i<=2000;$i++){
$data = array(
'coupon_amount'=>$amount,
'coupon_number'=>$this->createNonceStr(12),
'coupon_pwd'=>$this->createNonceStr(8),
'status'=>1
);
array_push($arr,$data);
}
dump($arr);
Db::name('coupon_card')->insertAll($arr);
}
//随机字符串
public function createNonceStr($length = 12) {
$chars = "123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
查看是否有重复
select count(*) as num,group_concat(coupon_pwd) from fcxlt_coupon_card group by coupon_number HAVING num>1 order by num desc;
后期完善,coupon_card新增is_online和create_time时间,因后台可以生成卡券,线上赠送。线下的是打印为卡片
alter table fcxlt_coupon_card
add create_time datetime not null
add is_online tinyint(1) not null default 1 comment '1线下2线上'
我的卡券明细表,增加卡号信息
alter table fcxlt_coupon_mlist
add coupon_num varchar(225) not null default 0