http://blog.chinaunix.net/uid-11121450-id-3480134.html快春节了,各个公司都陆续举办年会,ipad作为年会抽奖的大奖都卖脱销了,在年会抽奖出现尴尬的是:抽奖抽多了,没有奖品可发。
我昨天总结了在开发过程中遇到的抽奖问题
1.抽奖类型
1.1 即开型
提交后立即知道是否中奖:大转盘,老hu机
1.2 公证型
由公证处公证,现场抽奖
1.3投票型
根据投票数最高排名,选出中奖者
1.4 评选型
由客户根据作品质量选取
这四种类型中出现错误时,最难处理的顺序是:危险性:即开型>公证型>投票型>评选型
2.抽奖要素
2.1 即开型
奖品、概率、中奖时段、中奖规则(微博粉丝数,是否可以重复中奖,…)、如何获取中奖用户信息、通知中奖方式
2.2 公证型
奖品、概率 、如何获取中奖用户信息、通知中奖方式,中奖规则(微博粉丝数,是否可以重复中奖,…)
2.3 投票型
奖品、投票限制(每天每人或者ip每个作品只能投票10次…)、防止刷票(验证码) 、如何获取中奖用户信息、通知中奖方式
2.4 评选型
奖品、如何获取中奖用户信息、通知中奖方式
3.抽奖流程
4.注意事项
1)奖品不能够发多
2)奖品类型不能混淆
3)尽量在一次请求内完成抽奖
4)多步即时开奖时,每一步之间用uuid关联(或者session),不能够使用用户id或者别的自增的id,必须保证id不能够被猜出来。
5)投票一定得考虑刷票现象,最好使用中文验证码
6)抽奖过程中若是出现异常,一定得有返回值,返回值一定是“不中奖”
7)若是出现数据库错误,一定回滚
8)抽奖的每一步最好记录到日志文件中,以备检查
9)抽奖程序里的时间必须是一个,应该是在程序开始时记录一个时间戳,所有涉及到时间的地方都用这个时间,不能够在不同的sql语句中使用now,否则出现在同一个程序里跨天的问题
10)一定得使用POST方式提交数据
11)数据库里的中奖标志只能是一个字段
12)中奖名单页面中查询一般是中奖标志加上时间段或者奖品分类
5.抽奖概率算法
假设 一等奖几率:1/1000,二等奖几率:1/100
1)设定基数是1000
2)产生一个0…999的随机数
3)若是这个数小于1则中一等奖
4)若是这个数小于1+10,则中二等奖
5)否则不中奖