Home>Article>Backend Development> Algorithm for implementing WeChat red envelopes based on PHP

Algorithm for implementing WeChat red envelopes based on PHP

墨辰丷
墨辰丷 Original
2018-06-01 16:45:28 1830browse

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=3Red 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)

Red envelope 3=10-Red envelope 1-Red envelope 2

......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.' 元 
'; } 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 second red envelope: 1.9 yuan, balance: 0.62 yuan

The third red envelope: 0.49 yuan, balance: 0.13 Yuan
The 4th red envelope: 0.04 Yuan, balance: 0.09 YuanThe 5th red envelope: 0.03 Yuan, balance: 0.06 YuanThe 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 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)/($num-$i);//随机安全上限 $money=mt_rand($min*100,$safe_total*100)/100; $total=$total-$money; echo '第'.$i.'个红包:'.$money.' 元,余额:'.$total.' 元 
'; } 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 second red envelope: 1.55 yuan , balance: 8.39 yuan

The 3rd red envelope: 0.25 yuan, balance: 8.14 yuan
The 4th red envelope: 0.98 yuan, balance: 7.16 yuanThe 5th red envelope: 1.88 yuan, balance: 5.28 yuanThe 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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn