工作记录:php实现对QQ号,手机号,IP地址添加星号作为掩码。

今天到了发奖的日期,考虑到对用户隐私的保护,需要对用户的QQ号和IP地址进行加星处理,于是写了下面2个函数。代码如下:

/**
* php给QQ号等或手机号中加星号掩码,保护隐私
* @param    num     $num        QQ号或者手机号
* @param    num     $star_num   添加星星个个数
* @return   string              返回添加了星号后的QQ号或者手机号
* @author   shuiguang 
*/ 
function mask_number($num, $star_num = 4)
{
    $star_num = $star_num >= strlen($num) ? strlen($num)-2 : (int)$star_num;
    if($star_num % 2 == 0)
    {
        $star_left = $star_right = $star_num/2;
    }else{
        $star_left = floor($star_num/2);
        $star_right = $star_num - $star_left;
    }
    $len = strlen($num);
    $left = floor($len/2)-$star_left;
    $right = round($len/2)-$star_right;
    $middle = $len - $left - $right;
    $result = substr($num, 0, $left).str_repeat("*", $middle).substr($num, $left+$middle, $right);
    return $result;
}

 
/** 
* php实现IP加星号掩码,保护隐私
* @param    string    $ip           标准IPv4地址,若不匹配正则将不会处理
* @param    string    $star_num     添加星星个个数
* @return   string                  返回添加了星号后的ip地址
* @author   shuiguang 
*/ 
function mask_ip($ip, $star_num = 2)
{
    $pattern = '/((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))/';
    if(preg_match($pattern, $ip))
    {
        $newipr = array();
        $ipr = explode('.', $ip);
        $ipnum = count($ipr);
        for($i = 0; $i < $ipnum; $i++)
        {
            $newipr[] = $i >= $ipnum-$star_num ? '*' : $ipr[$i];
        }
        return implode('.', $newipr);
    }else{
        return $ip;
    }
}

$qq = 1000000000;
p(mask_number($qq));
p(mask_number($qq, 10));

$ip = '192.168.1.1';

p(mask_ip($ip));
p(mask_ip($ip, 0));


function p($var)
{
    echo "<pre>";
    if($var === false)
    {
        echo 'false';
    }else if($var === ''){
        print_r("''");
    }else{
        print_r($var);
    }
    echo "</pre>";
}

处理完成之后便是如何展示用户的获奖信息,由于获奖人数比较多,页面无法一次呈现,于是采用滚动形式播放用户中奖名单。
没有引用jquery,使用下面的这个原生函数再配合css可以实现上下滚动的效果。

<ul id='all_qq' style="height:60px;overflow:hidden;margin:0;padding:0">
    <li style="height:30px;margin:0;padding:0">第1行</li>
    <li style="height:30px;margin:0;padding:0">第2行</li>
    <li style="height:30px;margin:0;padding:0">第3行</li>
</ul>
<script>
/** 
* js实现上下滚动的效果
* @param    num     lh      每滚动一次增加的高度,单位px
* @return   num     speed   滚动的动画速度,单位ms
* @return   num     delay   滚动的间隔时间,单位ms
* @return   num     id      滚动的id标签,不带#
* @author   shuiguang 
*/  
function startmarquee(lh, speed, delay, id){
    var t;
    var p = false;
    var o = document.getElementById(id);
    o.innerHTML += o.innerHTML;
    o.onmouseover = function () {
        p = true
    }
    o.onmouseout = function () {
        p = false
    }
    o.scrollTop = 0;
    function start() {
        t = setInterval(scrolling, speed);
        if (!p) {
            o.scrollTop += 1;
        }
    }
    function scrolling() {
        if (o.scrollTop % lh != 0) {
            o.scrollTop += 1;
            if (o.scrollTop >= o.scrollHeight / 2)
                o.scrollTop = 0;
        } else {
            clearInterval(t);
            setTimeout(start, delay);
        }
    }
    setTimeout(start, delay);
}
//all_qq为待滚动的容器的ID,每次滚动向上移动30px
//每次滚动动画时间为15ms,停留时间为1000ms
startmarquee(30, 15, 1000, 'all_qq');
</script>

加上css美化后效果还不错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值