博主寒冰最近闲来无事。就想研究一下微信红包的金额随机算法。早在微信红包刚出来的时候就研究过。始终不得要领。后来,通过查阅诸多资料。听说要实现“正态分布”。这个理论的东西不想深挖。恰好在网上一篇博客找到一个相对完整的算法。我经过试用确实不错。经过我的一些优化达到了可用级别。

PHP 源码如下:

class RandMoney

{

/**

* 红包金额(元)

*

* -- 最小值:0.01。

*

* @var float

*/

private $rewardMoney;

/**

* 红包数量

*

* @var int

*/

private $rewardNum;

/**

* 分散度值

*

* -- 1 ~ 10000

* --- 最佳值 100

*

* @var int

*/

private $scatter;

/**

* 执行红包生成算法

*

* @param float $rewardMoney 随机总金额。

* @param int $rewardNum 拆分数量。

* @param int $scatter 分散度值。

* @return void

*/

public function splitReward($rewardMoney, $rewardNum, $scatter = 100)

{

// 传入红包金额和数量。

$this->rewardMoney = $rewardMoney;

$this->rewardNum = $rewardNum;

$this->scatter = $scatter;

$this->realscatter = $this->scatter / 100;

$avgRand = round(1 / $this->rewardNum, 4);

$randArr = [];

while (count($randArr) < $rewardNum) {

$t = round(sqrt(mt_rand(1, 10000) / $this->realscatter));

$randArr[] = $t;

}

$randAll = round(array_sum($randArr) / count($randArr), 4);

$mixrand = round($randAll / $avgRand, 4);

$rewardArr = [];

foreach ($randArr as $key => $randVal) {

$randVal = round($randVal / $mixrand, 4);

$rewardArr[] = round($this->rewardMoney * $randVal, 2);

}

sort($rewardArr);

$rewardAll = array_sum($rewardArr);

$rewardArr[$this->rewardNum - 1] = round($this->rewardMoney - ($rewardAll - $rewardArr[$this->rewardNum - 1]), 2);

rsort($rewardArr);

return $rewardArr;

}

}

调用:

$money = 100; // 总额。

$people = 200; // 红包个数。

$scatter = 100; // 分散度。就是拆成的金额分页更大。

$reward = new RandMoney();

$rewardArr = $reward->splitReward($money, $people, $scatter);

print_r($rewardArr);

大家可以执行一下试试。

php 随机钱数,PHP 仿微信红包金额随机相关推荐

  1. php 红包算法教程,php仿微信红包分配算法的实现方法

    php仿微信红包分配算法的实现方法 本文实例讲述了php仿微信红包分配算法的实现方法.分享给大家供大家参考,具体如下: /** * 红包分配:把一定金额随机分配给指定人数 * * @param int ...

  2. 微信红包的随机算法是怎样实现的

    2019独角兽企业重金招聘Python工程师标准>>> 微信红包的随机算法是怎样实现的? RT.我考虑了一个简单的算法: 比如100元,由10个人分,那么平均一个人是10元钱.然后付 ...

  3. 红包指定分配金额php,php仿微信红包分配算法的实现方法_PHP

    本文实例讲述了php仿微信红包分配算法的实现方法.分享给大家供大家参考,具体如下: /** * 红包分配:把一定金额随机分配给指定人数 * * @param int $money 用于分配的金额 * ...

  4. Android 仿微信红包动画 平移动画

    Android 仿微信红包动画 平移动画 先看效果图: 简单思路: 先找好素材,一张红包封面和 "开"这个图片,先用ps将红包图片P成两部分,两个椭圆的样子."开&quo ...

  5. php+仿微信发红包+负数,php仿微信红包分配算法的实现方法

    本文实例讲述了php仿微信红包分配算法的实现方法.分享给大家供大家参考,具体如下: /** * 红包分配:把一定金额随机分配给指定人数 * * @param int $money 用于分配的金额 * ...

  6. 微信红包的随机算法是怎样实现的?

    导语:今天看到有人问:关于微信红包的随机算法!就查阅资料看了一下"微信红包的架构设计",自己设计的"公平"的随机算法. 实现的代码 public static ...

  7. 红包的分配算法php,php仿微信红包分配算法的实现方法,红包算法

    php仿微信红包分配算法的实现方法,红包算法 本文实例讲述了php仿微信红包分配算法的实现方法.分享给大家供大家参考,具体如下: /** * 红包分配:把一定金额随机分配给指定人数 * * @para ...

  8. php 仿微信发红包 负数,php仿微信红包分配算法的实现方法

    本文实例讲述了php仿微信红包分配算法的实现方法.分享给大家供大家参考,具体如下: /** * 红包分配:把一定金额随机分配给指定人数 * * @param int $money 用于分配的金额 * ...

  9. 红包的分配算法php,php仿微信红包分配算法的实现方法,红包算法_PHP教程

    php仿微信红包分配算法的实现方法,红包算法 本文实例讲述了php仿微信红包分配算法的实现方法.分享给大家供大家参考,具体如下: /** * 红包分配:把一定金额随机分配给指定人数 * * @para ...

最新文章

  1. 《理解 ES6》阅读整理:块绑定(Block Binding)
  2. python编程怎么做游戏主播_如何成为一名成功的编程主播?
  3. MyBatis 几个常用的 jdbcType数据
  4. python2.7安装scrapy_python 2.7 的Scrapy安装介绍
  5. q7goodies事例_Java 8 Friday Goodies:Lambda和SQL
  6. 阿里李飞飞:云原生分布式数据库面临哪些机遇与挑战?
  7. 【学员作品】我的电商类App 3.2.1居然被拒了,怎么破?(酷课堂iOS交流群问答整理201812期)
  8. 2021北京计算机考研科目,2021年北京大学计算机考研科目
  9. ArcGIS修改默认文件地理数据库
  10. 主成分分析法(三):计算步骤
  11. 通过 百度网盘 分享文件
  12. 支付宝统一收单接口实现支付宝支付
  13. linux版vmware无法导入ovf,vmware 虚拟机导入OVF出现路径错误
  14. [UE5蓝图基础一]13.类似”人类一败涂地”掉落一定距离会回到空中 最终着落点还是设定地形上
  15. 笨鸟的平凡之路-记一次spark错误
  16. 计算机省一级b类模拟试题,江苏省计算机一级模拟试题及答案
  17. Centos7下的zabbix安装与部署
  18. Render函数详解
  19. 在Linux系统上运行.net core程序
  20. Materialise Magics 22.0软件的安装

热门文章

  1. QPW 操作日志表(tl_operate_log)
  2. 华为服务器芯片总在pc,服务器芯片 华为
  3. 百度地图android绘图类,Class:android总类/android离线地图类
  4. python有道自动翻译_利用python写一个有道翻译的脚本
  5. 头条号个人中心登录_头条号平台上线「插入小程序」功能
  6. yolov3安卓实现_YOLOv3 的 TensorFlow 实现,GitHub 完整源码解析
  7. mysql ignore 1 lines_MYSQL使用笔记(1)
  8. jquery怎么判断不同的字显示不同的颜色_这个双十一,摄影师的显示器该换了,优派VP2785-2K显示器评测_显示器...
  9. delphi image 编辑器_照片拼图编辑器app下载-照片拼图编辑器下载 v1.0.0 安卓版
  10. 协议转换器是怎么分类的?主要有哪些类别?