終於有了,史上最強大的數據脫敏處理算法


哈哈,標題黨了,向你道歉!

言歸正傳。

我們的應用系統里,為保護用戶隱私,用戶的敏感信息經常要做脫敏顯示或脫敏存儲,比如用戶的身份證號、手機號、銀行卡,等等。在支付系統或金融系統,數據安全是第一要務,數據的脫敏處理更是必選項。

【身份證號脫敏示例】120115201406180712 脫敏后:120115********0712
【銀行卡號脫敏示例】9558820200019833888 脫敏后:955882*********3888
【手機號脫敏示例】18810754438 脫敏后:188******38

 

算法實現原理很簡單,就是保留頭尾字符,把中間的部分用特殊字符如星號“*”作為掩碼來表示。

網上類似算法很多。這里提供一個可供參考:

import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
    public static String tuoMin(String str, int headCharCount, int tailCharCount) {
        if(str.length()<headCharCount+tailCharCount){
            throw new IllegalArgumentException("明文過短,無法脫敏");
        }
        String repeat = "";

        int len = str.length() - headCharCount - tailCharCount;
        if (len > 0) {
            char[] buf = new char[len];
            AtomicInteger integer = new AtomicInteger(0);
            Arrays.asList(new Integer[len]).stream().forEach(b -> buf[integer.getAndIncrement()] = '*');
            repeat = new String(buf);
        }
        return str.substring(0, headCharCount) + repeat + str.substring(str.length() - tailCharCount);
    }

 

測試案例:

    public static void main(String[] args) {
        System.out.println(tuoMin("120115201406180712", 6, 4));
        System.out.println(tuoMin("9558820200019833888", 6, 4));
        System.out.println(tuoMin("18810754438", 3, 2));
    }

結果輸出:

120115********0712
955882*********3888
188******38

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM