名称脱敏

要求:姓名脱敏
1)2个字姓名的名做脱敏,比如张三,显示为张*
2)3个字姓名的第2个名做脱敏,比如张立三,显示为张*三
3)超过4个字姓名的前2位和最后1位不变,中间字符全部脱敏,比如慕容张三,显示为慕容*三

代码:

package com.zc.feature;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Objects;

@RunWith(SpringRunner.class)
public class NameTest {

    @Test
    void test1() {
        String name = "张三";
        System.out.println(nameForDesensitization(name));
        name = "张三四";
        System.out.println(nameForDesensitization(name));
         name = "张三四五";
        System.out.println(nameForDesensitization(name));
         name = "张三四五六";
        System.out.println(nameForDesensitization(name));
        name = "张三四五六七八";
        System.out.println(nameForDesensitization(name));
    }

    /**
     * 名字脱敏
     * @param name 名称
     * @return
     */
    private static String nameForDesensitization(String name) {
        String resultStr = "";
        if (Objects.isNull(name) || name.length() < 2) {
            return name;
        } else if(name.length() == 2) {
            resultStr += name.substring(0, 1)+"*";
        }else if(name.length() == 3) {
            resultStr += name.substring(0, 1)+"*"+name.substring(2);
        }else if(name.length() >=4) {
            resultStr += name.substring(0, 2);
            resultStr +=repeat("*",name.length() -3);
            resultStr += name.substring(name.length()-1);
        }
        return  resultStr;
    }

    /**
     * 输出指定个数的字符
     * @param c 特定字符
     * @param length 输出字符个数
     * @return
     */
    private static String repeat(String c, int length) {
        String rep = "";
        for (int i = 0; i < length; i++) {
            rep += c;
        }
        return rep;
    }

}

 

posted @ 2022-07-21 13:42  不良帅~  阅读(2018)  评论(0编辑  收藏  举报