抢红包代码留存

<?php
//phpinfo();
header("Content-type:text/html;charset=utf-8");
include ‘Mysql.class.php‘;
 $redis = new Redis();
 $redis->connect(‘127.0.0.1‘, 6379);
 $user_id = $_GET[‘user_id‘]?$_GET[‘user_id‘]:1;
 $money = $_GET[‘money‘];
 $num = $_GET[‘num‘];

//创建红包 并进行拆包存入缓存
if($_GET[‘action‘] == "add"){
    
    
    $data = hongbao($money,$num);
    foreach ($data as $key => $value) {
        $redis->lPush("hongbao".$user_id,$value);
    }

echo "红包创建成功";

//抢包动作
}elseif($_GET[‘action‘] == "send"){
    $count = $redis->Lsize("hongbao".$user_id);
    $c_user_id = rand();
    if($count>0 && $price = $redis->lPop("hongbao".$user_id)){
        
         $mysql = new Mysql("localhost","root","root","qhb");
         $data = array(
             ‘user_id‘=>$c_user_id,
             ‘price‘=>$price,
         );
         $mysql->insert("hongbao",$data);
        // file_put_contents("./data/hongbao.log", "\r\n抢到红包:金额为:".$data[‘price‘]."userid:".$data[‘user_id‘],FILE_APPEND);
    }else{
        // file_put_contents("./data/hongbao.log", "\r\n没有抢到红包,userid:".$c_user_id,FILE_APPEND);
    }
}

/**
     * 红包生成算法
     * @param $money    总金额
     * @param $number   红包数量
     * @param $ratio    浮动系数
     */
    function hongbao($money,$number,$ratio = 0.5){
        $res = array(); //结果数组
        $min = ($money / $number) * (1 - $ratio);   //最小值
        $max = ($money / $number) * (1 + $ratio);   //最大值
        /*--- 第一步:分配低保 ---*/
        for($i=0;$i<$number;$i++){
            $res[$i] = $min;
        }
        $money = $money - $min * $number;
        /*--- 第二步:随机分配 ---*/
        $randRatio = 100;
        $randMax = ($max - $min) * $randRatio;
        for($i=0;$i<$number;$i++){
            //随机分钱
            $randRes = mt_rand(0,$randMax);
            $randRes = $randRes / $randRatio;
            if($money >= $randRes){ //余额充足
                $res[$i]    += $randRes;
                $money      -= $randRes;
            }
            elseif($money > 0){     //余额不足
                $res[$i]    += $money;
                $money      -= $money;
            }
            else{                   //没有余额
                break;
            }
        }
        /*--- 第三步:平均分配上一步剩余 ---*/
        if($money > 0){
            $avg = $money / $number;
            for($i=0;$i<$number;$i++){
                $res[$i] += $avg;
            }
            $money = 0;
        }
        /*--- 第四步:打乱顺序 ---*/
        shuffle($res);
        /*--- 第五步:格式化金额(可选) ---*/
        foreach($res as $k=>$v){
            //两位小数,不四舍五入
            preg_match(‘/^\d+(\.\d{1,2})?/‘,$v,$match);
            $match[0]   = number_format($match[0],2);
            $res[$k]    = $match[0];
        }

return $res;
    }
?>

时间: 2024-10-06 03:47:47

抢红包代码留存的相关文章

android抢红包代码解析支持微信与QQ

最近有一段时间没写博客了,一方面是工作比较忙,一方面也着实本人水平有限,没有太多能与大家分享的东西,也就是在最近公司要做一个抢红包的功能,老板发话了咋们就开干呗,本人就开始在网上收集资料,经过整理和实践,总算完美实现了功能,这里拿出本人一点微薄的成就与大家分享. 首先界面是这样的 开启自动抢红包只需点击相应的选项即可,下面我们进入正题,实现自动抢红包的原理,其实是借助android下的一个辅助服务AccessibilityService,这个服务是google公司为许多Android使用者因为各

双11抢红包代码

发个群福利,天猫双11红包自动抢代码 使用chrome/firefox浏览器,打开http://s.click.taobao.com/yJK1Nmx,登录自己的淘宝账号,然后按"F12",在"console"里粘贴以下代码 var AutoClick=$; function getHb(){ if(AutoClick("div[clk='core:close']")!=null){ AutoClick("div[clk='core:cl

抢购代码留存

//phpinfo();header("Content-type:text/html;charset=utf-8");include 'Mysql.class.php'; $redis = new Redis(); $redis->connect('127.0.0.1', 6379); $id = $_GET['id']?$_GET['id']:1; if($_GET["action"] == "add"){          $mysql

代码在线编译器(下)- 用户代码安全检测

此文已由作者姚太行授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前文连接 案例的介绍已在前文中给出,本文中对相关部分将不再叙述.为更好地阅读本文,需要简单了解背景,建议可以大致浏览下前文: 代码在线编译器(上)- 编辑及编译 安全检测 在线编译器中的安全检测,目的是确定用户代码是否能够安全的运行,且不对运行环境产生危害.仍以一般场景和特殊场景(前文有说明)举例区分: 一般场景:用户代码仅依赖原生库,运行环境选择沙箱情况下,沙箱间相互独立,用户代码导致的环境损害只会作用

移动App入侵与逆向破解技术-iOS篇

如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析.追踪.注入等实用的破解技术,另外,通过"入侵",将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件结构与入侵的原理 介绍入侵常用的工具和方法,包括pc端和手机端 讲解黑客技术中的静态分析和动态分析法 通过一个简单的实例,来介绍如何综合运用砸壳.寻找注入点.lldb远程调试.追踪.反汇编技术来进行黑客实战 讲解越狱破解补丁和不需越狱的破解补丁制作方法和差别 黑客的素养 敏锐的嗅觉 有时候通过一个函数名,一个

C#正则表达式获取组名,按照组名输出匹配内容

最近写了个正则表达式匹配的工具,可以按照组名输出匹配内容,还是挺方便的,代码留存一下,以后用的话,直接copy了. Regex regex = new Regex(this.textBoxRegex.Text); Match result = regex.Match(this.textBoxText.Text); if (result.Success) { StringBuilder sb = new StringBuilder(); foreach (var groupName in rege

【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析.追踪.注入等实用的破解技术,另外,通过"入侵",将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件结构与入侵的原理 介绍入侵常用的工具和方法,包括pc端和手机端 讲解黑客技术中的静态分析和动态分析法 通过一个简单的实例,来介绍如何综合运用砸

codevs 1862 最长公共子序列(求最长公共子序列长度并统计最长公共子序列的个数)

题目描述 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y="y0,y1,-,yk-1"是X的子序列,存在X的一个严格递增下标序列<i0,i1,-,ik-1>,使得对所有的j=0,1,-,k-1,有xij = yj.例如,X="ABCBDAB",Y="BCDB"是X的一个子序

解析PE文件的附加数据

解析程序自己的附加数据,将附加数据写入文件里. 主要是解析PE文件头.定位到overlay的地方.写入文件. 常应用的场景是在crackme中,crackme自身有一段加密过的附加数据.在crackme执行的过程中解析自己的附加数据,然后解密这段数据.. .. 代码留存: //解析自己的PE文件 TCHAR szModuleFile[MAX_PATH] = {0}; ::GetModuleFileName(NULL, szModuleFile, MAX_PATH); HANDLE hFile =