php生成 优惠券 激活码

时间:2021-07-03 15:59:17
/**
* 生成vip激活码
* @param int $nums 生成多少个优惠码
* @param array $exist_array 排除指定数组中的优惠码
* @param int $code_length 生成优惠码的长度
* @param int $prefix 生成指定前缀
* @return array 返回优惠码数组
*/
public function generateCode( $nums,$exist_array='',$code_length = 6,$prefix = '' ) { $characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz";
$promotion_codes = array();//这个数组用来接收生成的优惠码 for($j = 0 ; $j < $nums; $j++) { $code = ''; for ($i = 0; $i < $code_length; $i++) { $code .= $characters[mt_rand(0, strlen($characters)-1)]; } //如果生成的4位随机数不再我们定义的$promotion_codes数组里面
if( !in_array($code,$promotion_codes) ) { if( is_array($exist_array) ) { if( !in_array($code,$exist_array) ) {//排除已经使用的优惠码 $promotion_codes[$j] = $prefix.$code; //将生成的新优惠码赋值给promotion_codes数组 } else { $j--; } } else { $promotion_codes[$j] = $prefix.$code;//将优惠码赋值给数组 } } else {
$j--;
}
} return $promotion_codes;
}

上述方法可以直接拷贝使用

下面列出个人优惠券激活码的数据表设计,各位看官感觉是否有用

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `vip_card`
-- ----------------------------
DROP TABLE IF EXISTS `vip_card`;
CREATE TABLE `vip_card` (
  `id` int(11) NOT NULL,
  `code` char(10) DEFAULT '' COMMENT '激活码',
  `bid` int(11) DEFAULT '0' COMMENT '购买人',
  `uid` int(11) DEFAULT '0' COMMENT '使用人',
  `dlength` int(11) DEFAULT '0' COMMENT '时长',
  `act_date` date DEFAULT '0000-00-00' COMMENT '激活时间',
  `end_date` date DEFAULT '0000-00-00' COMMENT '结束时间',
  `exp_date` date DEFAULT '0000-00-00' COMMENT '过期时间[如果送激活码的话,使用这个字段,过期多少天不可激活]',
  `localcity` int(11) DEFAULT '0' COMMENT '城市code',
  `create_time` datetime DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',
  `is_use` int(5) DEFAULT NULL COMMENT '是否已经使用  0未使用  1已使用',
  PRIMARY KEY (`id`),
  KEY `index_code` (`code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='激活码';

-- ----------------------------
-- Records of vip_card
-- ----------------------------