Java 手机号中间四位隐藏 MySQL函数手机号四位隐藏 Oracle手机号隐藏Java手机号码隐藏

        Java 手机号中间四位隐藏 MySQL函数手机号四位隐藏 Oracle手机号隐藏 Java手机号码隐藏

一、情景描述

        在日常开发工作中,遇到一个需求:用户的手机号信息,中间四位需要隐藏起来,保护用户隐私。一般在数据库中都是存储完整的手机号信息,如:13122334455 ,而实际界面上展示数据需求是:131****4455 ,可以在数据库层面处理,也可以在Java代码层面处理,本文分别记录 Java、MySQL、Oracle 实现手机号中间四位隐藏的功能实现。

二、java实现

        1、使用正则表达式实现

  /**
     * @Description: 使用正则表达式实现
     * @param phone
     * @return String
     * @version v1.0
     * @author wu
     * @date 2022年4月13日 下午11:05:52
     */
    static String hidePhoneByRegular(String phone){
        if(StringUtils.isNotBlank(phone) && phone.length() == 11) {
           return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
        }
        return phone;
    }

        2、使用字符串截取,拼接实现

 /**
     * @Description:字符串截取--拼接实现
     * @param phone
     * @return
     * @return String
     * @version v1.0
     * @author wu
     * @date 2022年4月13日 下午11:03:33
     */
    static String hidePhone(String phone){
        if(StringUtils.isNotBlank(phone) && phone.length() == 11){
            // 截取前面三位
            String start = phone.substring(0, 3);
            // 中间填充四颗星 ****
            String middle = "****";
            // 截取末尾四位
            String end = phone.substring(7, 11);
            return start.concat(middle).concat(end);
        }
        return phone;
    }

        

        3、使用Hutool的PhoneUtil实现手机号码隐藏

        ( 2023年6月5日 16:15:55 )

/**
 * Description: 使用Hutool的PhoneUtil实现手机号码隐藏
 * @return void
 * @version v1.0
 * @author wu
 * @date 2023/6/5 16:10
 */
@Test
public void hidePhoneByHutoolTest() throws Exception{
    String s = "17600213668";
    System.out.println("1-后四位隐藏 :"+PhoneUtil.hideAfter(s));
    System.out.println("2-前七位隐藏 :"+PhoneUtil.hideBefore(s));
    System.out.println("3-中间四位隐藏 :"+PhoneUtil.hideBetween(s));

    s = "1760021366";
    System.out.println("4-后四位隐藏 :"+PhoneUtil.hideAfter(s));
    System.out.println("5-前七位隐藏 :"+PhoneUtil.hideBefore(s));
    System.out.println("6-中间四位隐藏 :"+PhoneUtil.hideBetween(s));

    s = "176002136689";
    System.out.println("7-后四位隐藏 :"+PhoneUtil.hideAfter(s));
    System.out.println("8-前七位隐藏 :"+PhoneUtil.hideBefore(s));
    System.out.println("9-中间四位隐藏 :"+PhoneUtil.hideBetween(s));
}

三、MySQL实现

        1、insert 函数,语法规则如下:

-- insert函数用法 INSERT(str,start,end,newstr)
/**
 * str:源字符串
 * start: 起始位置
 * end: 结束位置
 * newStr: 替换的字符串
 */
 
select 
	insert('13155667788',4,4,'****') as phone 
,	insert('13155667788',6,4,'****') as phone2 
from dual ;

四、Oracle 实现

        1、substr 函数 --- 和Java中类似

SELECT 
	 STARTS , ends 
	 , STARTS || '****' || ends AS res1
	 , CONCAT(STARTS,CONCAT('****',ENDS)) AS res2 
FROM (
	SELECT 
		SUBSTR('13155667788',0,3) AS Starts 
		, SUBSTR('13155667788',1,3) AS Starts2 
	 	, SUBSTR('13155667788',8,11) AS ends 
	FROM dual 
) 

五、总结

        1、实现手机号隐藏的需求,从数据库层面和Java代码层面都是可以实现的; 实现原理类似:对字符串进行 截取、拼接。

        2、Oracle中字符串拼接: || 和 concat 的区别是:

  • || :可以不限次数拼接(理论上可以无限套娃)。 如:'a' ||'b'||'c' || ...
  • concat : 只能拼接一次,多次拼接需要concat 函数嵌套使用。如: CONCAT('a',CONCAT('b',CONCAT('c',...)))

        3、Oracle concat 函数和 MySQL concat 函数的区别是:同上【五-2】。

  • Oracle concat 函数:拼接一次 ...
  • MySQL concat 函数:理论上可以无限套娃 ...

        4、可以根据实际情况,按需所取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值