使用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 相关文章推荐
PHP5新特性: 更加面向对象化的PHP
Nov 18 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
PHP中使用break跳出多重循环代码实例
Jan 21 PHP
php实现购物车功能(上)
Jul 23 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
Oct 29 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 PHP
WordPress伪静态规则设置代码实例
Dec 10 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
PHP在Web开发领域的优势
2006/10/09 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
JavaScript中的事件委托及好处
2016/07/12 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python返回真假值(True or False)小技巧
2015/04/10 Python
Python正则表达式使用经典实例
2016/06/21 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
瀑布模型都有哪些优缺点
2014/06/23 面试题
动物科学专业毕业生的自我评价
2013/11/29 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
师范生免费教育协议书范本
2014/10/09 职场文书
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android