<?php
/**
* 随机生成红包金额
* @param $n 红包个数
* @param $sum 总金额 整数
* @param $index_max 最大金额在数组中索引
* @param $error
* @return array|false
*/
public static function GenRandRePacketsData($n,$sum,&$index_max,&$error)
{
if($sum < $n)
{
$error = '金额总数不能小于红包个数'; //金额总数必须大于红包个数;
return false;
}
if($n > 50)
{
$error = '红包数量不能大于50';
return false;
}
//$sum = $sum * 100;//转为分
$rst = [];
$ave = intval($sum/$n); // 金额除去红包个数 平均值
$one_rst = rand(1,$ave); // 随机取1到平均值的数
$subSum = $one_rst;
$rst[] = $one_rst;
$index_min = 0;
$index_max = 0;
$min = $one_rst;
$max = $one_rst; for($i = 2; $i <= $n; $i ++)
{
$ave = intval(($sum - $subSum)/($n - $i + 1));
$one_rst = rand(1,$ave);
if($min > $one_rst)
{
$min = $one_rst;
$index_min = $i -1;
}
if($max < $one_rst)
{
$max = $one_rst;
$index_max = $i -1;
}
$rst[] = $one_rst;
$subSum += $one_rst;
}
$left = $sum - $subSum; if($left > 0)
{
$rst[$index_min] = ($rst[$index_min] + $left);
if($rst[$index_min] > $max)
{
$max = $rst[$index_min];
$index_max = $index_min;
}
}
//检测重复的最大值处理,确保最大值唯一
/*for($i =0; $i < $n; $i++)
{
if($rst[$i] === $max && $i !== $index_max)
{
$one_rst = $rst[$i] -1;
$rst[$i] = $one_rst;
$rst[$index_max] = $max + 1;
break;
}
}*/ //重新乱序
shuffle($rst);
//查找最大值
$index_max = 0;
$max = $rst[0];
for($i =1; $i < $n; $i ++)
{
if($rst[$i]> $max)
{
$index_max = $i;
$max = $rst[$i];
}
}
return $rst;
}

  

php生成红包的更多相关文章

  1. C#开发微信门户及应用(38)--微信摇一摇红包功能

    摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...

  2. 修改ECSHOP系统红包序列号规律

    ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字.如果当我们要发放大额度红包的时候,这样的序列号规则难免给人不安全的感觉,万一真的有哪个无聊的人,用一天时间来蒙 ...

  3. ECSHOP如何增加红包序列号字符

    ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字.如果当我们要发放大额度红包的时候,这样的序列号规 则难免给人不安全的感觉,万一有无聊的人,蒙几个红包序列号出来 ...

  4. php 固定红包 + 随机红包算法

    <?php /** * 随机红包+固定红包算法[策略模式] * copyright (c) 2016 http://blog.csdn.net/CleverCode */ //配置传输数据DTO ...

  5. php红包

    /**   转http://www.oschina.net/code/snippet_1392428_54532     谢谢 php_fangting * @param $total [你要发的红包 ...

  6. php微信红包算法

    微信红包算法.php /**生成红包的函数*/ function getRandMoney($totalMoney, $totalPeople=2, $miniMoney=1){ $randRemai ...

  7. 微信小程序发送红包功能。填坑记录

    微信官方文档 1.开通条件 (1)商户号已入驻90日 (2)商户号有连续30天正常交易 (3)只有企业资质的商户才有资格申请 2.注意事项 (1)目前小程序红包仅支持用户微信扫码打开小程序 (2)小程 ...

  8. 研究微信红包分配算法之Golang版

    今天来看一下红包的分配,参考几年前流传的微信红包分配算法,今天用Golang实现一版,并测试验证结果. 微信红包的随机算法是怎样实现的?https://www.zhihu.com/question/2 ...

  9. redBag

    var redBag = (function () { var initialed = false, raining = true, createInterval, walkInterval, cre ...

随机推荐

  1. windows添加永久静态路由

    添加路由最好在命令行管理员模式下操作 添加临时路由命令,重启后失效 route add 172.16.1.0 mask 255.255.255.0 10.0.10.19 其中,172.16.1.0 是 ...

  2. Git 2.x 中git push时遇到 push.default 警告的解决方法

    近在学习使用 git&GitHub,然后今天遇到了一个问题.在执行 git add 和 git commit 操作之后,再进行 git push 操作,出现了如下提示: $ git push ...

  3. [转]golang的goroutine调度机制

    golang的goroutine调度机制 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 一直对goroutine的调度机制很好奇最近在看雨痕的golang源码分析基于go ...

  4. 【java】设计模式-单例设计模式

    单例设计模式:解决一个类在内存中是存在一个对象的问题.当需要该事物的对象在内存中唯一时,将以下三步添加即可. 思想:想要保证对象唯一1.为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象2 ...

  5. 第一天Python

    一.开发语言 高级语言:Python  Java.PHP     高级语言--字节码(PHP适用于写网页) 低级语言:C.汇编--机器码(底层开发,根本,效率低) 二.Python种类 三.安装

  6. Java单列模式

    设计模式 单列模式的定义和作用 目的:使得类的一个对象成为该类系统中的唯一实列: 定义:一个类有且仅有一个实例,并且自行实列化向整个系统提供?: 单列模式分为 恶汉式  (在创建对象的时候就直接初始化 ...

  7. 我是一个录像机(NVR)

    我是一个网络录像机,简称NVR.我的前辈是DVR,我们的区别很简单,DVR接的是模拟摄像机,我连接的是IP摄像机. 我的前辈DVR比我辛苦,因为模拟摄像机的模拟信号连过来之后,他要进行数字化.编码压缩 ...

  8. easyui layout布局的属性说明

    layout布局的属性说明: 名称 类型 描述 默认值 fit boolean 当设置为 true 时,就设置布局(layout)的尺寸适应它的父容器.当在 'body' 标签上创建布局(layout ...

  9. ActiveMQ-5.15.2下载和启动(windows)

    一.下载和部署 我的ActiveMQ版本是 5.15.2,参照别人家的博客,下载和启动照样成功.别人家的博客地址: http://blog.csdn.net/clj198606061111/artic ...

  10. 推导式_字典_enumerate

    字典推导式_enumerate: ''' 功能: 枚举, 拿出iter的每一个元素和索引(可以设置start改变) 组队放入一个元祖中返回 参数:iterable, start(指定索引开始的位置) ...