今天到了发奖的日期,考虑到对用户隐私的保护,需要对用户的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美化后效果还不错。