Home >Backend Development >PHP Tutorial >Algorithm for implementing WeChat red envelopes based on PHP
Everyone has used WeChat to send red envelopes in bulk, but how to achieve mass sending of red envelopes in WeChat? This article will reveal the answer in detail for everyone. Interested friends can refer to
. I sent a red envelope to the alumni WeChat group on a whim. I set the total red envelope to 10 yuan and supported 28 people to receive it randomly. .
So an interesting result appeared:
A received 0.26 yuan
B received 0.29 yuan
C received 0.02 yuan
D received 0.56 yuan
E received 0.64 yuan
......What algorithm does WeChat use to do this? I simply checked on Baidu and found that there is no official explanation yet. There is only a relatively popular discussion in Zhihu. Click here for the link. However, their discussion is too in-depth and seems to be a trap.
I tried it according to my own logic. This algorithm needs to meet the following requirements:
1. Everyone must be able to receive red envelopes;
2. The total amount of red envelopes received by each person = total Amount;
3. The amount of red envelopes received by each person varies, but the difference cannot be too outrageous, otherwise it will be uninteresting;
4. The algorithm must be simple, otherwise it will fail Tencent’s signature;
Official Before coding, first build a progressive model to analyze the rules
Set the total amount to 10 yuan, and N people will randomly receive:
N=1
then red envelopes Amount = Two red envelopes = 10 - the amount of the first red envelope;
N=3 Red envelope 1=a random number between 0.01 and 0.98
Red envelope 2=0.01 to (10 -A certain random number of red envelope 1-0.01)
...... At this point, the pattern appears! Start coding!
Php code
header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8个红包,支持8人随机领取 $min=0.01;//每个人最少能收到0.01元 for ($i=1;$i<$num;$i++) { $safe_total=$total-($num-$i)*$min;//随机安全上限 $money=mt_rand($min*100,$safe_total*100)/100; $total=$total-$money; echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元 <br/>'; } echo '第'.$num.'个红包:'.$total.' 元,余额:0 元';After inputting it, the fluctuation is too big, the data is too boring!
The first red envelope: 7.48 yuan, balance: 2.52 yuan
The third red envelope: 0.49 yuan, balance: 0.13 Yuan
The 4th red envelope: 0.04 Yuan, balance: 0.09 Yuan The 5th red envelope: 0.03 Yuan, balance: 0.06 Yuan The 6th red envelope: 0.03 Yuan, balance: 0.03 Yuan
7 red envelopes: 0.01 yuan, balance: 0.02 yuan
The 8th red envelope: 0.02 yuan, balance: 0 yuan
Improve it and use the average as a random safety upper limit to control Fluctuation difference
Php codeheader("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的
$total=10;//红包总额
$num=8;// 分成8个红包,支持8人随机领取
$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.' 元 <br/>';
}
echo '第'.$num.'个红包:'.$total.' 元,余额:0 元';
The output result is shown in the figure below
The first red envelope: 0.06 yuan, balance: 9.94 yuan
The 3rd red envelope: 0.25 yuan, balance: 8.14 yuan
The 4th red envelope: 0.98 yuan, balance: 7.16 yuan The 5th red envelope: 1.88 yuan, balance: 5.28 yuan The 6th red envelope: 1.92 yuan, balance: 3.36 yuan
The 7th red envelope: 2.98 yuan, balance: 0.38 yuan
The 8th red envelope: 0.38 yuan, balance: 0 yuan
Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.
Related recommendations:
PHP implements Alipay’s instant payment function
Examples of PHP conforming to PSR programming specifications
PHP realizes Alipay’s instant payment function
The above is the detailed content of Algorithm for implementing WeChat red envelopes based on PHP. For more information, please follow other related articles on the PHP Chinese website!