使用PHP编写发红包程序

使用PHP编写发红包程序

http://www.jb51.net/article/69815.htm

投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22

微信发红包是最近非常火的一件事情,大家或多或少的都发过或者收到过红包,那么下面来看一个我们在生活中常碰到的一个php实现微信红包的程序算法,希望这个程序对各位做微信开的朋友会带来帮助.

使用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至总金额-预留金额间取随机数,得到的随机数就是当前红包分配的金额。

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

红包分配代码:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

$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代码

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

<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 {

 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 { }

#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代码

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?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完成派红包程序有所帮助。

时间: 2024-10-24 20:40:39

使用PHP编写发红包程序的相关文章

用Python编写简单的发红包程序和计算器原理

用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成分为单位 ret = random.sample(range(1,money),num-1) #在最低钱数1分与总钱数之间生成人数减1个数作为数轴的节点 ret.sort() #对列表进行排序 ret.insert(0,0) ret.append(money) for i in range(len(

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至总金额-预留金额间取随机

python+redis简单实现发红包程序

redis是什么? Redis 是一个高性能的key-value数据库! 想进一步了解请移步搜索引擎自行查找. 编写这个小程序的目的就是对redis进行一个简单的小操作,对redis有一个初步的了解,并未有什么高大尚的骚操作,适合小白阅读. 程序共分为三个部分. 1.创建红包 2.将红包存储到数据库 3.取出红包 1.创建红包 首先需要确定创建红包需要哪些参数. 1.红包的最小金额0.01 2.红包的数量 3.红包总金额 4.红包需要一个ID号(存储数据库的时候需要使用) 5.每个红包的金额 1

PHP+Ajax手机移动端发红包实例

基本流程:当输入完红包数量和总金额后,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-红

用VS2010编写的C++程序,在其他电脑上无法运行,提示缺少mfc100.dll的解决办法

问题: 在自己电脑上用VS2010编写的VC++程序(使用MFC库),不能在其他电脑上运行.双击提示: "无法启动此程序,因为计算机中丢失mfc100.dll 尝试重新安装该程序以解决此问题." 解决方案: 方案一 采用静态编译使用VS2010编译的程序在windowsxp中运行时,经常会出现找不到相关的DLL文件,我们可以使用静态编译的方法把这些运行依赖文件打包到*.exe中来,以减少对环境的依赖. 一般可以配置以下两项: 项目 -< **属性 -< 配置属性-<

qq划屏幕红包程序

qq划屏幕红包程序

1014 编写完词法分析程序的感想

经过几个星期的努力,总算把词法分析的程序给完成了,总的来说这是一个坚苦而又漫长的过程.是啊,读了那么多年的书,编写词法分析程序可是第一次呀!看着劳动成果,很欣慰!虽然这不是我一个人做的,是大家的共同努力得来的. 几个星期前,当听到老师布置给我们的这个题目时,我们都蒙了,这么难的题目我们怎么会啊!毕竟我们对那个一无所知,对于老师上课的讲解还能听懂,不过理论与实践之间还是有鸿沟的.我们私下都表示不满,抗议,可是一切都是徒劳,所以我们只能尽我们自己最大的努力把程序给写出来. “也许完成不了!”两个星期

使用XCB编写X Window程序(06):XCB取代Xlib的理由

我经常访问Xorg的官网,希望能找到一些对理解Linux和X Window有用的东西.结果也确实是偶有所得.比如,在Xorg的官网中就建议大家不用Xlib了,改用XCB.不可否认,Xlib确实是一个比较老的东西,老到最新的一本关于Xlib的书都已经是N多年前出版的了.有了Xorg官方的指导,我自然不用学Xlib了,直接上XCB. 经过这一段时间的学习,对XCB有了一定的了解.我的学习是根据XCB官方的教程来的,当然,如果有一点点在GUI编程领域的经验和悟性学习起来会更加事半功倍.在XCB的官方教

为编写的Windows程序提升权限

1.要求以管理员身份运行 在vs工程属性中,Linker ---> Manifest File---> UAC Execution Level,选择requireAdministrator (/level='requireAdministrator')选项 2.在main函数开始时运行以下函数代码: BOOL WINAPI EnablePrivileges() { HANDLE hToken; TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCur