php 给手机加’ * ‘号的 函数?

非自己的客户手机号加密展示,展示规则:前三位数字,后三位数字明文,中间拼接4位,例如:182****3336, +152****3663。如果手机号长度小于7位,展示前三位数字,后面拼接8位,例如:123********
求函数?

阅读 2.6k
4 个回答

使用substr_replace 将下标3(从 0 开始计算)后面的4位替换为 **** ,再使用 str_pad 将 文本填充至 11 位,若已是 11 位,则不会操作,否则有。

<?php

$phone = '13166584536';

echo str_pad(substr_replace($phone, '****', 3, 4), 11, '*');
// 131****4536

$phone2 = '0216666';
echo str_pad(substr_replace($phone2, '****', 3, 4), 11, '*');
// 021********

有个缺陷 8 ~ 10 位的会显示成 022****11**

<?php
function hideStr($string, $bengin = 0, $len = 4, $type = 0, $glue = "@") {
    if (empty($string))
        return false;
    $array = array();
    if ($type == 0 || $type == 1 || $type == 4) {
        $strlen = $length = mb_strlen($string);
        while ($strlen) {
            $array[] = mb_substr($string, 0, 1, "utf8");
            $string = mb_substr($string, 1, $strlen, "utf8");
            $strlen = mb_strlen($string);
        }
    }
    if ($type == 0) {
        for ($i = $bengin; $i < ($bengin + $len); $i++) {
            if (isset($array[$i]))
                $array[$i] = "*";
        }
        $string = implode("", $array);
    } else if ($type == 1) {
        $array = array_reverse($array);
        for ($i = $bengin; $i < ($bengin + $len); $i++) {
            if (isset($array[$i]))
                $array[$i] = "*";
        }
        $string = implode("", array_reverse($array));
    } else if ($type == 2) {
        $array = explode($glue, $string);
        $array[0] = hideStr($array[0], $bengin, $len, 1);
        $string = implode($glue, $array);
    } else if ($type == 3) {
        $array = explode($glue, $string);
        $array[1] = hideStr($array[1], $bengin, $len, 0);
        $string = implode($glue, $array);
    } else if ($type == 4) {
        $left = $bengin;
        $right = $len;
        $tem = array();
        for ($i = 0; $i < ($length - $right); $i++) {
            if (isset($array[$i]))
                $tem[] = $i >= $left ? "*" : $array[$i];
        }
        $array = array_chunk(array_reverse($array), $right);
        $array = array_reverse($array[0]);
        for ($i = 0; $i < $right; $i++) {
            $tem[] = $array[$i];
        }
        $string = implode("", $tem);
    }
    return $string;
}
  
  
$str = '123456';
echo hideStr($str,3,4);

/**
 * 隐藏手机号码
 *
 * @param string $mobile 手机号码
 *
 * @return string
 */
function hide_mobile($mobile = '')
{
    if (strlen($mobile) > 7) {
        return substr($mobile, 0, 3) . str_repeat('*', strlen($mobile) - 7) . substr($mobile, -4);
    } elseif (strlen($mobile) > 2) {
        return substr($mobile, 0, 1) . str_repeat('*', strlen($mobile) - 2) . substr($mobile, -1);
    } else {
        return $mobile;
    }
}

简易版本

$phone{0}.$phone{1}.$phone{2}.'xxxxxx';

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题