php实现微信红包的程序算法

最近一直在微信群里体验红包功能,红包类型有

•普通红包

•拼手气红包两种

普通红包就不用多解析了,大锅饭原理,平分。
拼手气红包讲的是手气(运气),有人可以抢到很多,有人抢的少得可怜,当然也不是先抢就一定多,说到底了就是随机。

 

 

想了想,自己写写看,能不能实现类似的功能(不敢说是算法)。
// $bonus_total 红包总金额
// $bonus_count 红包个数
// $bonus_type 红包类型 1=拼手气红包 0=普通红包
function randBonus($bonus_total=0, $bonus_count=3, $bonus_type=1){
    $bonus_items    = array(); // 将要瓜分的结果
    $bonus_balance  = $bonus_total; // 每次分完之后的余额
    $bonus_avg      = number_format($bonus_total/$bonus_count, 2); // 平均每个红包多少钱

    $i              = 0;
    while($i<$bonus_count){
        if($i<$bonus_count-1){
            $rand           = $bonus_type?(rand(1, $bonus_balance*100-1)/100):$bonus_avg; // 根据红包类型计算当前红包的金额
            $bonus_items[]  = $rand;
            $bonus_balance  -= $rand;
        }else{
            $bonus_items[]  = $bonus_balance; // 最后一个红包直接承包最后所有的金额,保证发出的总金额正确
        }
        $i++;
    }
    return $bonus_items;
}

 好吧,我们现在来体验一下
// 发3个拼手气红包,总金额是100元
$bonus_items    = randBonus(100, 3, 1);
// 查看生成的红包
var_dump($bonus_items);
// 校验总金额是不是正确,看看微信有没有坑我们的钱
var_dump(array_sum($bonus_items));

 另一个使用数组实现的版本,原理差不多:
function sendRandBonus($total=0, $count=3, $type=1){
    if($type==1){
        $input          = range(0.01, $total, 0.01);
        if($count>1){
            $rand_keys  = (array) array_rand($input,  $count-1);
            $last       = 0;
            foreach($rand_keys as $i=>$key){
                $current    = $input[$key]-$last;
                $items[]    = $current;
                $last       = $input[$key];
            }
        }
        $items[]        = $total-array_sum($items);
    }else{
        $avg            = number_format($total/$count, 2);
        $i              = 0;
        while($i<$count){
            $items[]    = $i<$count-1?$avg:($total-array_sum($items));
            $i++;
        }
    }
    return $items;
}

时间: 2024-09-23 04:54:22

php实现微信红包的程序算法的相关文章

微信红包随机生成算法php版_php实例

想了想,自己写写php版的微信红包随机生成算法,能不能实现类似的功能(其实也不敢说是算法).// $bonus_total 红包总金额// $bonus_count 红包个数// $bonus_type 红包类型 1=拼手气红包 0=普通红包 function randBonus($bonus_total=0, $bonus_count=3, $bonus_type=1){ $bonus_items = array(); // 将要瓜分的结果 $bonus_balance = $bonus_to

微信红包算法研究

背景:之前过年亲戚人都在抢红包,都想抢第一个,说是越早抢越大.其实这肯定是不正确的,微信在你发红包的时候应该已经生成所有的红包了,所以说你无论第几个抢,按说应该都一样,除非微信做了一些处理,比如说越早抢红包越可能手气最佳,过完年回来上班,突然想起了微信红包,就在想微信红包生成的策略. 20块钱10个红包,人均2块钱.因为理论上红包的金额应该在2块钱左右,而且越大概率越小,感觉这个很像正态分布函数,所以感觉微信红包属于截尾正态分布.手气最佳一般在2倍-3倍左右. 类似于这种(网上找的图): 所有红

基于PHP微信红包的算法探讨_php实例

突发奇想给校友微信群发了红包,我设定红包总额为10元,支持28个人随机领取. 于是一个有趣的结果出现了:A 领取了 0.26元 B 领取了 0.29元 C 领取了 0.02元 D 领取了 0.56元 E 领取了 0.64元 --微信是采用什么样的算法做到的?简单百度了下,目前尚未有官方的说明,仅仅在知乎里有一个较为热门的讨论,链接戳这里,不过他们讨论的太过于深入,有掉坑之嫌. 我按照自己的逻辑尝试了下,这个算法需要满足以下几点要求: 1.每个人都要能够领取到红包: 2.每个人领取到的红包金额总和

Java实现仿微信红包分配规则_java

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教. 算法介绍 一.红包金额限制       对于微信红包,我们知道没人随机的最小红包是1分,最大金额是200元,这里我们同样来设置红包的范围,下面代码我们统一金钱的单位为分. //最小红包额度 private static final int MINMONEY = 1; //最大红包额度 private static final int MAXMONEY

代码-把微信红包拼手气和普通红包结合成一个红包使用

问题描述 把微信红包拼手气和普通红包结合成一个红包使用 50C 如何实现把微信红包拼手气和普通红包结合成一个红包使用,目前还没有人可以实现其中的原理,欢迎前来探讨 解决方案 你的问题好奇怪,不过我还是发表一下我自己的看法.首先手气红包是用随机算法跑出来的,而一般红包就是一个可以由用户自己来设定大小的.然后针对你这个问题,想把两者合起来.只需要把两者的处理程序合在一起就行了.

企业公众服务号微信红包编程是否要进入开发者模式,如果消息推送 给了别的服务器 开发模式关闭怎么办?

问题描述 企业公众服务号微信红包编程是否要进入开发者模式,如果消息推送 给了别的服务器 开发模式关闭怎么办? 企业公众服务号微信红包编程是否要进入开发者模式,如果消息推送 给了别的服务器 开发模式关闭怎么办? 解决方案 公众号,如果想要响应外部程序调用,就必须使用开发者模式 消息推送给别的服务器?我没完全弄明白你的意思. 你的程序,如果需要调用公众号的接口,必须要在该公众号中填写程序所在服务器的URL.KEY和TOKEN, 当程序调用的时候,公众号会根据这些信息来响应,通过接口推送的信息,只会出

微信怎么领红包?微信红包怎么提现?

第1步,我们打开宝用吧: 1.我们在电脑中直接搜索"应用宝" 点击进入 2.然后我们在进入到"应用宝"之后我们再点击"应用宝"二维码程序  第2步,通过二维码扫描下载应用宝终端: 1.现在我们在手机中打开微信,然后找到"发现"  2.然后在打开的"发现"找到"扫一扫"了 3.然后我们在扫时对应刚才打开的"应用宝"  4.这样扫到之后我们就可以下载"应用宝&q

php实现的微信红包算法分析(非官方)_php技巧

本文实例讲述了php实现的微信红包算法.分享给大家供大家参考.具体如下: 最近一直在微信群里体验红包功能,红包类型有两种: 1. 普通红包 2. 拼手气红包 普通红包就不用多解析了,大锅饭原理,平分. 拼手气红包讲的是手气(运气),有人可以抢到很多,有人抢的少得可怜,当然也不是先抢就一定多,说到底了就是随机. 想了想,自己写写看,能不能实现类似的功能(不敢说是算法). // $bonus_total 红包总金额 // $bonus_count 红包个数 // $bonus_type 红包类型 1

微信红包推出后,腾讯的得失

自从微信5.2版本发布,很多人的微信瞬间被"红包"刷屏. 微信红包的背后其实是一个名为"新年红包"的公众账号,它由腾讯财付通推出.可以预计的是,随着大量年轻人回乡与亲人团聚,春节期间微信红包势必会更大范围的病毒式传播,腾讯在不用花费任何推广费用的情况下就引爆了马年第一个全民话题,这个四两拨千斤的产品迅速被引爆的背后究竟隐藏了腾讯的那些得失? 微信红包为何这么红? 首先它很方便.用户只需进入"新年红包"公众号,选择发几个红包.发放的金额,写好祝福语