使用PHP编写发红包程序


Posted in PHP onJuly 22, 2015

使用PHP发红包,当我们输入红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,每个红包金额不等,就是要求红包金额要有差异,所有红包金额总额应该等于总金额。

我们先来分析下规律。

设定总金额为10元,有N个人随机领取:
N=1 第一个
则红包金额=X元;
N=2 第二个
为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数。
第二个红包=10-第一个红包金额;
N=3 第三个
红包1=0.01至9.99之间的某个随机数
红包2=0.01至(10-红包1-0.01)的某个随机数
红包3=10-红包1-红包2
……

于是我们得到一个规律,在分配当前红包金额时,先预留剩余红白所需最少金额,然后在0.01至总金额-预留金额间取随机数,得到的随机数就是当前红包分配的金额。

实际应用中,程序先将红包金额分配好,即发红包时,红包个数以及每个红包的金额都分配好了,那么用户来抢红包时,我们随机给用户返回一个红包即可。

红包分配代码:

$total=20;//红包总金额  
$num=10;// 分成10个红包,支持10人随机领取  
$min=0.01;//每个人最少能收到0.01元  
 
for ($i=1;$i<$num;$i++)  
{  
  $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限  
  $money=mt_rand($min*100,$safe_total*100)/100;  
  $total=$total-$money; 
   
  echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元 ';  
}  
echo '第'.$num.'个红包:'.$total.' 元,余额:0 元';

运行以上代码,会输出以下结果:

第1个红包,金额2.08元,余额17.92元
第2个红包,金额1.81元,余额16.11元
第3个红包,金额0.15元,余额15.96元
第4个红包,金额1.61元,余额14.35元
第5个红包,金额1.11元,余额13.24元
第6个红包,金额1.51元,余额11.73元
第7个红包,金额1.21元,余额10.52元
第8个红包,金额2.58元,余额7.94元
第9个红包,金额5.4元,余额2.54元
第10个红包,金额2.54元,余额0元

附上完整代码:

html代码

<script type="text/javascript" src="http://libs.useso.com/js/jquery/1.7.2/jquery.min.js"></script>
<style>
.demo{width:300px; margin:60px auto 10px auto}
@media only screen and (min-width: 420px) {
 .demo{width:500px; margin:60px auto 10px auto}
}

.demo p{height:62px; line-height:30px}
.demo p label{width:100px; text-align:right}
.input{width:140px; height:24px; line-height:14px; border:1px solid #d3d3d3}
button, .button {
 background-color: #f30;color: white;border: none;box-shadow: none;
 font-size: 17px;font-weight: 500;font-weight: 600;
 border-radius: 3px;padding: 15px 35px;margin: 26px 5px 0 0px;cursor: pointer; }
button:hover, .button:hover {background-color: #f00; }
#result{width:360px; margin:10px auto}
#result p{line-height:30px}
#result p span{margin:4px; color:#f30}
</style>
</head>

<body>
<div id="main">
 <div class="demo">
 <button>生成10个红包,总金额20元</button>
 </div>
 <div id="result"></div>
 <div class="ad_76090"><script src="/js/ad_js/bd_76090.js" type="text/javascript"></script></div><br/>
</div>
<script>
$(function(){
 $("button").click(function(){
 $.ajax({
  type: 'POST',
  url: 'bao.php',
  dataType: 'json',
  beforeSend: function(){
  $("#result").html('正在分配红包');
  },
  success: function(json){
  if(json.msg==1){
   var str = '';
   var res = json.res;
   $.each(res,function(index,array){ 
   str += '<p>第<span>'+array['i']+'</span>个红包,金额<span>'+array['money']+'</span>元,余额<span>'+array['total']+'元</span></p>';
   });
   $("#result").html(str);
  }else{
   $("#result").html('数据出错!');
  }
  }
 });
 });
});
</script>

php代码

<?php
header("Content-Type: text/html;charset=utf-8");

$total=20;//红包总额 
$num=10;// 分成10个红包,支持10人随机领取 
$min=0.01;//每个人最少能收到0.01元 

for ($i=1;$i<$num;$i++) { 
  $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限 
  $money=mt_rand($min*100,$safe_total*100)/100; 
  $total=$total-$money; 
 $arr['res'][$i] = array(
 'i' => $i,
 'money' => $money,
 'total' => $total
 );
} 
$arr['res'][$num] = array('i'=>$num,'money'=>$total,'total'=>0);
$arr['msg'] = 1;
echo json_encode($arr);
?>

以上所述就是本文的全部内容了,希望对大家熟练应用php完成派红包程序有所帮助。

PHP 相关文章推荐
php json与xml序列化/反序列化
Oct 28 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
php通过文件头判断格式的方法
May 28 PHP
php生成mysql的数据字典
Jul 07 PHP
PHP实现的回溯算法示例
Aug 15 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
实例讲解php实现多线程
Jan 27 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 #PHP
php 把数字转换成汉字的代码
Jul 21 #PHP
通过Email发送PHP错误的方法
Jul 20 #PHP
php实现编辑和保存文件的方法
Jul 20 #PHP
php数组生成html下拉列表的方法
Jul 20 #PHP
php生成过去100年下拉列表的方法
Jul 20 #PHP
PHP基于文件存储实现缓存的方法
Jul 20 #PHP
You might like
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
php多任务程序实例解析
2014/07/19 PHP
php跨服务器访问方法小结
2015/05/12 PHP
crontab无法执行php的解决方法
2016/01/25 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
通过js来制作复选框的全选和不选效果
2014/05/22 Javascript
JavaScript常用小技巧小结
2014/12/29 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
python实现字符串加密 生成唯一固定长度字符串
2019/03/22 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
ubuntu上安装python的实例方法
2019/09/30 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
软件测试面试题
2014/01/05 面试题
中专生的个人自我评价
2013/12/11 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
高中生班主任评语
2014/04/25 职场文书
商务经理岗位职责
2014/07/30 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
python解析照片拍摄时间进行图片整理
2022/07/23 Python