Tagged: 代码

隐藏字符串中部分字符的PHP函数,如:姓名、用户名、身份证、IP、手机号等

<?php
/**
 * 将一个字符串部分字符用re替代隐藏
 * @param stringstring   待处理的字符串
 * @param int       start    规定在字符串的何处开始,
 *                            正数 - 在字符串的指定位置开始
 *                            负数 - 在从字符串结尾的指定位置开始
 *                            0 - 在字符串中的第一个字符处开始
 * @param intlength   可选。规定要隐藏的字符串长度。默认是直到字符串的结尾。
 *                            正数 - 从 start 参数所在的位置隐藏
 *                            负数 - 从字符串末端隐藏
 * @param string    re       替代符
 * @return string   处理后的字符串
 */
function hidestr(string, start = 0,length = 0, re = '*') {
    if (empty(string)) return false;
    strarr = array();mb_strlen = mb_strlen(string);
    while (mb_strlen) {
        strarr[] = mb_substr(string, 0, 1, 'utf8');
        string = mb_substr(string, 1, mb_strlen, 'utf8');mb_strlen = mb_strlen(string);
    }strlen = count(strarr);begin  = start >= 0 ?start : (strlen - abs(start));
    end    =last   = strlen - 1;
    if (length > 0) {
        end  =begin + length - 1;
    } elseif (length < 0) {
        end -= abs(length);
    }
    for (i=begin; i<=end; i++) {strarr[i] =re;
    }
    if (begin >=end || begin >=last || end>last) return false;
    return implode('', $strarr);
}

测试:
//隐藏手机号中间4位
hidestr('18600005940', 3, 4); //186****5940

//只保留姓名里的最后一个字,常见与ATM,网银等
hidestr('云厉', 0, -1); //*厉

//隐藏邮箱部分内容,常见网站帐号,如支付宝等
list(name,domain) = explode('@', '979137@qq.com');
hidestr(name, 1, -1) . '@' . hidestr(domain, 0, 2); // 9****7@**.com

此函数用法和PHP系统函数函数substr原理和用法是一样的。只不过substr是用于截取你想要的字符串,而hidestr是隐藏你想要的字符串,用*号代替

微信公众号:程序员到架构师

最新文章

Return Top