遮挡手机号码、身份证号码、邮箱地址、用户名的部分字符

<?php
/**
 * 遮挡手机号码中间4~7位数字
 * 说明:手机号码中间4~7位数字比较敏感,代表地区编码(即归属地省份和城市)。
 *
 * @param string $mobile 手机号码
 * @return string 遮挡中间4~7位数字后的手机号码
 */
function mobile_mosaic($mobile)
{
    return substr_replace($mobile, '****', 3, 4);
}

/**
 * 遮挡身份证号码
 * 说明①:身份证号码遮挡哪几位数字需要根据保密需求来决定,并没有统一的标准,如果想绝对安全就应该全部遮挡。
 * 说明②:一般来说建议遮挡最后四位,因为这四位数字无法根据前面的14位数字反推,所以遮挡住了保密性更好。
 * 说明③:火车票和法院公布失信被执行人都是遮挡出生月日。
 *
 * @param string $idno 身份证号码
 * @param int $start 起始位数(从0开始编号)
 * @param int $length 遮挡长度
 * @return string 遮挡后的身份证号码
 */
function idno_mosaic($idno, $start = null, $length = null)
{
    $start = $start === null ? 0 : $start;
    $length = $length === null ? 18 : $length;

    return substr_replace($idno, str_repeat('*', $length), $start, $length);
}

/**
 * 遮挡邮箱地址
 * 说明:遮挡登录名最后4个字母,主机名部分不遮挡。
 *
 * @param string $email 邮箱地址
 * @return string 遮挡后的邮箱地址
 */
function email_mosaic($email)
{
    list($login, $host) = explode('@', $email);

    $length = strlen($login);

    if ($length > 4) {
        $login = substr($login, 0, $length - 4) . '****';
    } else {
        $login = str_repeat('*', $length);
    }

    return "{$login}@{$host}";
}

/**
 * 遮挡用户名
 * 说明:遮挡用户名最后4个字母。
 *
 * @param string $username 用户名
 * @return string 遮挡后的用户名
 */
function username_mosaic($username)
{
    $length = strlen($username);

    if ($length > 4) {
        return substr($username, 0, $length - 4) . '****';
    }

    return str_repeat('*', $length);
}

// 遮挡手机号码中间4~7位数字
$mobile = '18812345678';
echo "{$mobile} => " . mobile_mosaic($mobile) . PHP_EOL; // 18812345678 => 188****5678

$idno = '532527199811192952';

// 遮挡身份证号码(全部数字)
echo "{$idno} => " . idno_mosaic($idno) . PHP_EOL; // 532527199811192952 => ******************

// 遮挡身份证号码(出生月日)
echo "{$idno} => " . idno_mosaic($idno, 10, 4) . PHP_EOL; // 532527199811192952 => 5325271998****2952

// 遮挡身份证号码(最后四位)
echo "{$idno} => " . idno_mosaic($idno, 14, 4) . PHP_EOL; // 532527199811192952 => 53252719981119****

// 遮挡身份证号码(只显示头尾的数字)
echo "{$idno} => " . idno_mosaic($idno, 1, 16) . PHP_EOL; // 532527199811192952 => 5****************2

// 遮挡邮箱地址
$email = 'manong@domain.com';
echo "{$email} => " . email_mosaic($email) . PHP_EOL; // manong@domain.com => ma****@domain.com

// 遮挡用户名
$username = 'manong';
echo "{$username} => " . username_mosaic($username) . PHP_EOL; // manong => ma****

Copyright © 2024 码农人生. All Rights Reserved