其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

PHP抽奖中奖概率生成算法

GG网络技术分享 2025-03-18 16:17 0


原理是使用hash随机字符串,位数不足时用0补齐,同时把函数后出现的字母按英文字母表进行数字替换。

再根据hash出来的长度换算成对应的百分比占比,用于获取对应区间内的奖品。

该算法只适用于轮播抽奖活动,并不适用于转盘抽奖JS,转盘的抽奖需要自行修改成360°圆形区间占比即可。

function random($length=16, $type=4) {

switch ($type) {

case 1: $str = \'0123456789\'; $num = 9; break;

case 2: $str = \'a0sqd1fwg2hej3krl4ztx5cyv6bun7mi8o9p\'; $num = 35; break;

case 3: $str = \'A0SQD1FWG2HEJ3KRL4ZTX5CYV6BUN7MI8O9P\'; $num = 35; break;

case 4: $str = \'qAw0eSrQrtDt1yFyWuGi2oHpEaJs3dKfRgLh4jZkTlXz5xCcYvVb6nBmUN7MI8O9P\'; $num = 64; break;

default:

return false;

break;

}

$ret = \'\';

for ($i=0; $i < $length; $i++) {

$ret .= $str[mt_rand(0, $num)];

}

return $ret;

}

function get_hash($id){

$max = 6;

$str = bin2hex($id);

$hash = substr($str, 0, 6);

if (strlen($hash)<6){

$hash = str_pad($hash, 6, \"0\");

}

$alphabet = [\'a\',\'b\',\'c\',\'d\',\'e\',\'f\',\'g\',\'h\',\'i\',\'j\',\'k\',\'l\',\'m\',\'n\',\'o\',\'p\',\'q\',\'r\',\'s\',\'t\',\'u\',\'v\',\'w\',\'x\',\'y\',\'z\'];

$alphabet = array_flip($alphabet);

for ($i=0; $i<$max; $i++) {

if (is_numeric($hash{$i}) == false) {

$hash{$i} = $alphabet[$hash{$i}];

}

}

return $hash;

}

$rand = get_hash(random());

$array = [

[

\'min\' => \'0.0001\',

\'max\' => \'0.1\',

\'title\' => \'中了只鸡\',

],

[

\'min\' => \'0.1\',

\'max\' => \'1\',

\'title\' => \'吃饭了没\',

],

[

\'min\' => \'1\',

\'max\' => \'20\',

\'title\' => \'三等奖\',

],

[

\'min\' => \'20\',

\'max\' => \'50\',

\'title\' => \'二等奖\',

],

[

\'min\' => \'50\',

\'max\' => \'100\',

\'title\' => \'别想了没一等奖\',

],

];

$ratio = 100 / 1000000;

$num = $ratio*$rand;

foreach ($array as $value) {

// TM中奖了啊

if ($num > $value[\'min\'] && $num <= $value[\'max\']) {

var_dump($rand);

var_dump($num);

var_dump($value[\'title\']);

break;

}

}


标签: 转盘 适用于

提交需求或反馈

Demand feedback