技術文章:使用Java進行微信ID和手機號碼檢測

摘要

本文將介紹一個Java程序,該程序能夠檢測文本中的微信ID和手機號碼,並將其屏蔽。程序首先定義了一系列與微信相關的關鍵字,然後使用正則表達式來匹配合法的手機號碼和微信ID。最後,該程序將檢測到的手機號碼和微信ID替換爲星號,以保護用戶隱私。

1. 程序介紹

隨着社交媒體的普及,個人隱私保護變得越來越重要。在某些情況下,我們可能需要從文本中檢測並屏蔽微信ID和手機號碼,以防止個人信息泄露。本程序旨在實現這一功能。

2. 關鍵字檢測

程序首先定義了一系列與微信相關的關鍵字,如“微信”、“WeChat”、“VX”等。通過遍歷這些關鍵字,程序可以檢測文本中是否包含這些關鍵字。

3. 正則表達式匹配

程序使用了兩個正則表達式來匹配手機號碼和微信ID。手機號碼的正則表達式匹配11位數字,以1開頭,第二位是2到9之間的數字。微信ID的正則表達式則匹配以字母或下劃線開頭的6到20個字符,由字母、數字、下劃線組成。

4. 檢測與屏蔽

程序使用Pattern​和Matcher​類來查找文本中的手機號碼和微信ID。一旦找到匹配項,程序會將其替換爲星號,以屏蔽這些信息。

5. 結果輸出

程序將檢測到的關鍵字、手機號碼和微信ID存儲在DetectionResult​對象中,並提供原始文本和屏蔽後的文本。最後,程序打印出每個測試用例的檢測結果。

6. 示例代碼

以下是程序的核心部分代碼:

public class WxAndPhoneDetector {

    
    public static void main(String[] args) {
        // 測試用例數組
        String[] testCases = {
                "我的微信號是:WeChat123_456",
                "聯繫電話:13609086289,非工作時間也可以聯繫我。",
                "微信轉賬功能真的很方便。",
                "微信聯繫我:WeChat_123456,電話:13609086289,價格可以微信詳談。",
                "參考編號:WeChat123!!!!!! 價格:136090800,詳情請聯繫。",
                "詳情請參考產品手冊。",
                "賬號: WeChat_123456, 聯繫電話: 13609086289。",
                "如果你需要幫助,可以聯繫我的微信號:wEcHaT_123456,或者手機:13609086289。",
                "緊急聯繫電話:+8613609086289 或者 136-0908-6289。",
                "微信號列表:WeChat_1, WeChat_2, 聯繫電話:136090800, 1391234567。"
        };

        // 遍歷測試用例
        for (String text : testCases) {
            DetectionResult result = detectKeywordsAndWeChatIDAndMobile(text);
            System.out.println("測試用例文本: " + text);
            System.out.println("檢測結果: " + result);
            System.out.println();
        }
    }

    /**
     * 檢測文本中是否包含指定的關鍵字、合法的微信號和手機號碼,並返回檢測結果。
     *
     * @param text 需要檢測的文本
     * @return 返回包含檢測結果的對象
     */
    public static DetectionResult detectKeywordsAndWeChatIDAndMobile(String text) {
        DetectionResult result = new DetectionResult();
        result.originalText = text; // 保存原始文本
        result.containsKeyword = false; // 初始化關鍵字標誌爲false

        // 定義需要檢測的關鍵字
        String[] keywords = {"微信", "Wx", "wx", "WX", "WeChat", "wechat", "Weixin", "weixin", "VX", "vx", "Vx", "vX", "QQ", "qq", "Qq", "qQ", "電話", "手機", "聯繫方式", "聯繫電話", "聯繫手機", "聯繫QQ", "聯繫微信"};

        // 檢測關鍵字
        for (String keyword : keywords) {
            if (text.contains(keyword)) {
                result.containsKeyword = true;
                result.keywordsFound.add(keyword);
            }
        }

        // 正則表達式,匹配11位手機號碼。
        String mobileRegex = "1[3-9]\\d{9}";

        // 正則表達式,匹配以字母或下劃線開頭的6到20個字符,由字母、數字、下劃線組成
        String weChatIDRegex = "[a-zA-Z_][a-zA-Z0-9_]{5,18}";

        // 使用Pattern和Matcher檢測手機號碼
        Pattern mobilePattern = Pattern.compile(mobileRegex);
        Matcher mobileMatcher = mobilePattern.matcher(text);

        // 查找並替換所有匹配的手機號碼爲星號
        StringBuffer buffer = new StringBuffer();
        while (mobileMatcher.find()) {
            String mobile = mobileMatcher.group();
            result.mobileNumbersFound.add(mobile);
        }
        mobileMatcher.appendTail(buffer); // 添加未匹配的部分
        String textAfterMobileReplacement = buffer.toString(); // 保存屏蔽手機號碼後的文本

        // 使用Pattern和Matcher檢測微信號
        Pattern weChatPattern = Pattern.compile(weChatIDRegex);
        Matcher weChatMatcher = weChatPattern.matcher(textAfterMobileReplacement);

        buffer = new StringBuffer(textAfterMobileReplacement);
        while (weChatMatcher.find()) {
            String weChatID = weChatMatcher.group();
            result.wechatIDsFound.add(weChatID);
        }
        weChatMatcher.appendTail(buffer); // 添加未匹配的部分
        // 根據已匹配的手機號碼和微信號碼,替換所有匹配的手機號碼和微信號碼爲星號
        result.maskedText = text.replaceAll(mobileRegex, "****").replaceAll(weChatIDRegex, "****"); // 保存屏蔽手機號碼和微信號碼後的文本

        return result;
    }

    /**
     * 封裝檢測結果的類。
     */
    public static class DetectionResult {
        List<String> keywordsFound = new ArrayList<>();
        List<String> wechatIDsFound = new ArrayList<>();
        List<String> mobileNumbersFound = new ArrayList<>();
        boolean containsKeyword = false; // 是否包含關鍵字
        String originalText; // 原始文本
        String maskedText; // 屏蔽微信號和手機號碼後的文本

        @Override
        public String toString() {
            return "是否包含關鍵字: " + containsKeyword +
                    ", 關鍵字列表: [" + String.join(", ", keywordsFound) + "]" +
                    ", 微信號列表: [" + String.join(", ", wechatIDsFound) + "]" +
                    ", 手機號碼列表: [" + String.join(", ", mobileNumbersFound) + "]" +
                    "\n" +
                    "原始文本: \"" + originalText + "\"" +
                    "\n" +
                    "屏蔽後的文本: \"" + maskedText + "\"";
        }
    }
}
測試用例文本: 我的微信號是:WeChat123_456
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [微信, WeChat], 微信號列表: [WeChat123_456], 手機號碼列表: []
原始文本: "我的微信號是:WeChat123_456"
屏蔽後的文本: "我的微信號是:****"

測試用例文本: 聯繫電話:13609086289,非工作時間也可以聯繫我。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [電話, 聯繫電話], 微信號列表: [], 手機號碼列表: [13609086289]
原始文本: "聯繫電話:13609086289,非工作時間也可以聯繫我。"
屏蔽後的文本: "聯繫電話:****,非工作時間也可以聯繫我。"

測試用例文本: 微信轉賬功能真的很方便。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [微信], 微信號列表: [], 手機號碼列表: []
原始文本: "微信轉賬功能真的很方便。"
屏蔽後的文本: "微信轉賬功能真的很方便。"

測試用例文本: 微信聯繫我:WeChat_123456,電話:13609086289,價格可以微信詳談。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [微信, WeChat, 電話], 微信號列表: [WeChat_123456], 手機號碼列表: [13609086289]
原始文本: "微信聯繫我:WeChat_123456,電話:13609086289,價格可以微信詳談。"
屏蔽後的文本: "微信聯繫我:****,電話:****,價格可以微信詳談。"

測試用例文本: 參考編號:WeChat123!!!!!! 價格:136090800,詳情請聯繫。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [WeChat], 微信號列表: [WeChat123], 手機號碼列表: []
原始文本: "參考編號:WeChat123!!!!!! 價格:136090800,詳情請聯繫。"
屏蔽後的文本: "參考編號:****!!!!!! 價格:136090800,詳情請聯繫。"

測試用例文本: 詳情請參考產品手冊。
檢測結果: 是否包含關鍵字: false, 關鍵字列表: [], 微信號列表: [], 手機號碼列表: []
原始文本: "詳情請參考產品手冊。"
屏蔽後的文本: "詳情請參考產品手冊。"

測試用例文本: 賬號: WeChat_123456, 聯繫電話: 13609086289。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [WeChat, 電話, 聯繫電話], 微信號列表: [WeChat_123456], 手機號碼列表: [13609086289]
原始文本: "賬號: WeChat_123456, 聯繫電話: 13609086289。"
屏蔽後的文本: "賬號: ****, 聯繫電話: ****。"

測試用例文本: 如果你需要幫助,可以聯繫我的微信號:wEcHaT_123456,或者手機:13609086289。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [微信, 手機], 微信號列表: [wEcHaT_123456], 手機號碼列表: [13609086289]
原始文本: "如果你需要幫助,可以聯繫我的微信號:wEcHaT_123456,或者手機:13609086289。"
屏蔽後的文本: "如果你需要幫助,可以聯繫我的微信號:****,或者手機:****。"

測試用例文本: 緊急聯繫電話:+8613609086289 或者 136-0908-6289。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [電話, 聯繫電話], 微信號列表: [], 手機號碼列表: [13609086289]
原始文本: "緊急聯繫電話:+8613609086289 或者 136-0908-6289。"
屏蔽後的文本: "緊急聯繫電話:+86**** 或者 136-0908-6289。"

測試用例文本: 微信號列表:WeChat_1, WeChat_2, 聯繫電話:136090800, 1391234567。
檢測結果: 是否包含關鍵字: true, 關鍵字列表: [微信, WeChat, 電話, 聯繫電話], 微信號列表: [WeChat_1, WeChat_2], 手機號碼列表: []
原始文本: "微信號列表:WeChat_1, WeChat_2, 聯繫電話:136090800, 1391234567。"
屏蔽後的文本: "微信號列表:****, ****, 聯繫電話:136090800, 1391234567。"

7. 結論

本文介紹的Java程序能夠有效地檢測和屏蔽文本中的微信ID和手機號碼,有助於保護用戶的隱私信息。通過使用正則表達式和字符串處理技術,程序能夠靈活地適應不同的檢測需求。

8. 未來工作

未來的工作可以包括擴展關鍵字列表,優化正則表達式以提高匹配準確性,以及增加對其他社交媒體ID的檢測支持。


本文提供了一個簡單的Java程序,用於檢測和屏蔽文本中的微信ID和手機號碼。程序的設計考慮了隱私保護的需求,並展示瞭如何使用Java的正則表達式API來實現複雜的文本處理任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章