php生成红包
<?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生成红包的更多相关文章
- C#开发微信门户及应用(38)--微信摇一摇红包功能
摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...
- 修改ECSHOP系统红包序列号规律
ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字.如果当我们要发放大额度红包的时候,这样的序列号规则难免给人不安全的感觉,万一真的有哪个无聊的人,用一天时间来蒙 ...
- ECSHOP如何增加红包序列号字符
ECSHOP系统线下发放红包时系统生成的红包序列号是在10000的基础上增加四位随机数字.如果当我们要发放大额度红包的时候,这样的序列号规 则难免给人不安全的感觉,万一有无聊的人,蒙几个红包序列号出来 ...
- php 固定红包 + 随机红包算法
<?php /** * 随机红包+固定红包算法[策略模式] * copyright (c) 2016 http://blog.csdn.net/CleverCode */ //配置传输数据DTO ...
- php红包
/** 转http://www.oschina.net/code/snippet_1392428_54532 谢谢 php_fangting * @param $total [你要发的红包 ...
- php微信红包算法
微信红包算法.php /**生成红包的函数*/ function getRandMoney($totalMoney, $totalPeople=2, $miniMoney=1){ $randRemai ...
- 微信小程序发送红包功能。填坑记录
微信官方文档 1.开通条件 (1)商户号已入驻90日 (2)商户号有连续30天正常交易 (3)只有企业资质的商户才有资格申请 2.注意事项 (1)目前小程序红包仅支持用户微信扫码打开小程序 (2)小程 ...
- 研究微信红包分配算法之Golang版
今天来看一下红包的分配,参考几年前流传的微信红包分配算法,今天用Golang实现一版,并测试验证结果. 微信红包的随机算法是怎样实现的?https://www.zhihu.com/question/2 ...
- redBag
var redBag = (function () { var initialed = false, raining = true, createInterval, walkInterval, cre ...
随机推荐
- python select解析 socket高效通信服务器 自己写的socketserver
import select import socket import queue server = socket.socket()#创建服务器端 server.bind(('localhost',99 ...
- windows下python虚拟环境virtualenv安装和使用
前面介绍了python在ubuntu16.04环境下,python的虚拟环境virtualenv的安装,下面介绍在windows环境下的安装和使用. 环境信息 操作系统:windows10 pytho ...
- JavaScript 快速排序详解
使用的是<JavaScript数据结构与算法>一书中的快速排序,并加上自己的理解. 经测试,此算法的速度比内置的 sort 更快!而阮一峰的那个快排更像是归并排序,虽然写法简单很多,但是性 ...
- PythonStudy——Python 内置函数 Built-in function
内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str ...
- c# automapper 使用(一)
一.最简单的用法 有两个类User和UserDto public class User { public int Id { get; set; } public string Name { get; ...
- PHP的 preg_match_all
语法:int preg_match_all ( string pattern, string subject, array &matches [, int flags] ) 这个函数的返回值是 ...
- Nginx做web服务器反向代理
实验目的 通过nginx实现反向代理的功能,类似apache反向代理和haproxy反向代理 工作中用nginx做反向代理和负载均衡的也越来越多了 有些公司从web服务器到反向代理,都使用nginx. ...
- PHP使用文件锁解决高并发问题示例
新建一个.txt文件,文件中什么都不用写. [一].阻塞(等待)模式:(只要有其他进程已经加锁文件,当前进程会一直等其他进程解锁文件) <?php //连接数据库 $con=mysqli_con ...
- angular的异步处理$q的使用(promise)
Angular中的promise: Promise是一种异步方式处理值的方法.代表了一个函数最 终可能的返回值或者抛出的异常 在之前,通常都是使用闭包或者回调来响应非同步的有意义数据 使用promis ...
- Twitter的雪花算法(snowflake)自增ID
前言 这个问题源自于,我想找一个分布式下的ID生成器. 这个最简单的方案是,数据库自增ID.为啥不用咧?有这么几点原因,一是,会依赖于数据库的具体实现,比如,mysql有自增,oracle没有,得用序 ...