首页 > 编程语言 >技术文章:使用Java进行微信ID和手机号码检测

技术文章:使用Java进行微信ID和手机号码检测

时间:2024-04-25 17:02:11浏览次数:25  
标签:Java 微信 列表 关键字 WeChat 手机号码 文本 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位手机号码,包括以12开头的号码
        String mobileRegex = "1[2-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();
            mobileMatcher.appendReplacement(buffer, "****");
            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();
            weChatMatcher.appendReplacement(buffer, "****");
            result.wechatIDsFound.add(weChatID);
        }
        weChatMatcher.appendTail(buffer); // 添加未匹配的部分
        result.maskedText = buffer.toString(); // 保存屏蔽微信号和手机号码后的文本

        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"
屏蔽后的文本: "我的微信号是:WeChat123_456我的微信号是:****"

测试用例文本: 联系电话:13609086289,非工作时间也可以联系我。
检测结果: 是否包含关键字: true, 关键字列表: [电话, 联系电话], 微信号列表: [], 手机号码列表: [13609086289]
原始文本: "联系电话:13609086289,非工作时间也可以联系我。"
屏蔽后的文本: "联系电话:****,非工作时间也可以联系我。联系电话:****,非工作时间也可以联系我。"

测试用例文本: 微信转账功能真的很方便。
检测结果: 是否包含关键字: true, 关键字列表: [微信], 微信号列表: [], 手机号码列表: []
原始文本: "微信转账功能真的很方便。"
屏蔽后的文本: "微信转账功能真的很方便。微信转账功能真的很方便。"

测试用例文本: 微信联系我:WeChat_123456,电话:13609086289,价格可以微信详谈。
检测结果: 是否包含关键字: true, 关键字列表: [微信, WeChat, 电话], 微信号列表: [WeChat_123456], 手机号码列表: [13609086289]
原始文本: "微信联系我:WeChat_123456,电话:13609086289,价格可以微信详谈。"
屏蔽后的文本: "微信联系我:WeChat_123456,电话:****,价格可以微信详谈。微信联系我:****,电话:****,价格可以微信详谈。"

测试用例文本: 参考编号:WeChat123!!!!!! 价格:136090800,详情请联系。
检测结果: 是否包含关键字: true, 关键字列表: [WeChat], 微信号列表: [WeChat123], 手机号码列表: []
原始文本: "参考编号:WeChat123!!!!!! 价格:136090800,详情请联系。"
屏蔽后的文本: "参考编号:WeChat123!!!!!! 价格:136090800,详情请联系。参考编号:****!!!!!! 价格:136090800,详情请联系。"

测试用例文本: 详情请参考产品手册。
检测结果: 是否包含关键字: false, 关键字列表: [], 微信号列表: [], 手机号码列表: []
原始文本: "详情请参考产品手册。"
屏蔽后的文本: "详情请参考产品手册。详情请参考产品手册。"

测试用例文本: 账号: WeChat_123456, 联系电话: 13609086289。
检测结果: 是否包含关键字: true, 关键字列表: [WeChat, 电话, 联系电话], 微信号列表: [WeChat_123456], 手机号码列表: [13609086289]
原始文本: "账号: WeChat_123456, 联系电话: 13609086289。"
屏蔽后的文本: "账号: WeChat_123456, 联系电话: ****。账号: ****, 联系电话: ****。"

测试用例文本: 如果你需要帮助,可以联系我的微信号:wEcHaT_123456,或者手机:13609086289。
检测结果: 是否包含关键字: true, 关键字列表: [微信, 手机], 微信号列表: [wEcHaT_123456], 手机号码列表: [13609086289]
原始文本: "如果你需要帮助,可以联系我的微信号:wEcHaT_123456,或者手机:13609086289。"
屏蔽后的文本: "如果你需要帮助,可以联系我的微信号:wEcHaT_123456,或者手机:****。如果你需要帮助,可以联系我的微信号:****,或者手机:****。"

测试用例文本: 紧急联系电话:+8613609086289 或者 136-0908-6289。
检测结果: 是否包含关键字: true, 关键字列表: [电话, 联系电话], 微信号列表: [], 手机号码列表: [13609086289]
原始文本: "紧急联系电话:+8613609086289 或者 136-0908-6289。"
屏蔽后的文本: "紧急联系电话:+86**** 或者 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。"
屏蔽后的文本: "微信号列表:WeChat_1, WeChat_2, 联系电话:136090800, 1391234567。微信号列表:****, ****, 联系电话:136090800, 1391234567。"

7. 结论

本文介绍的Java程序能够有效地检测和屏蔽文本中的微信ID和手机号码,有助于保护用户的隐私信息。通过使用正则表达式和字符串处理技术,程序能够灵活地适应不同的检测需求。

8. 未来工作

未来的工作可以包括扩展关键字列表,优化正则表达式以提高匹配准确性,以及增加对其他社交媒体ID的检测支持。


本文提供了一个简单的Java程序,用于检测和屏蔽文本中的微信ID和手机号码。程序的设计考虑了隐私保护的需求,并展示了如何使用Java的正则表达式API来实现复杂的文本处理任务。

标签:Java,微信,列表,关键字,WeChat,手机号码,文本,ID
From: https://www.cnblogs.com/shenhuanjie/p/18158086/technical-article-use-java-to-conduct-wecha

相关文章

  • nvidia官方AI框架软件的命令行操作接口 —— NVIDIA GPU Cloud (NGC) CLI
    NVIDIAGPUCloud(NGC)CLI安装介绍地址:https://org.ngc.nvidia.com/setup/installers/cli安装好后需要输入自己的NVIDIANGC的APIKEY,该信息在下面地址中生成:https://org.ngc.nvidia.com/setup/api-key......
  • java
    packagea1;publicclassDate{privateintday,month,year;Date(){day=1;month=1;year=1998;}Date(inti,intj,intk){day=i;month=j;year=k;}Date(Dated){day=d.day;......
  • Android开发中Button背景颜色不能修改问题及解决方法
    问题:使用AndroidStudio进行android开发时,不管是拖出来的Button,还是自己设置的Button,Button的背景色一直无法修改,呈现系统默认的紫色。例如我的代码,预览按钮的时候应该是彩色,但还是默认的颜色:紫色 问题原因:出现该问题的原因主要是因为使用AndroidStudio4.1之后的版本进行......
  • javaScript for-in循环
    for-infor-in循环是专门为循环对象设置的,因为对象没有长度没有顺序,所以不能使用for循环。for-in循环可以循环数组和对象,推荐循环对象的时候使用constobj={name:"LiuQing",age:18,sex:'男'}for(constkeyinobj){consol......
  • 三十分钟入门基础Go(Java小子版)
    前言Go语言定义Go(又称Golang)是Google的RobertGriesemer,RobPike及KenThompson开发的一种静态、强类型、编译型语言。Go语言语法与C相近,但功能上有:内存安全,GC,结构形态及CSP-style并发计算。适用范围本篇文章适用于学习过其他面向对象语言(Java、Php),但没有学过......
  • 创建Android Studio项目
    如果想在其他模拟器(如雷电上打开项目,需要提前模拟器) 下载好AndroidStudio后,打开选择newproject 选择自己想用的模板 输入基本信息:项目名称,包命名,版本等 点击finish  加载完成后结束......
  • iMac Android Studio快捷键
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!1、自定义功能快捷键MovetooppositegroupControl+Option+m2、定位目标功能快捷键搜索类Cmd+O搜索方法或字段Cmd+Option+O搜索文件、目录Cmd+Shift+......
  • Java之oop(面向对象编程)
    目录面向对象编程(OOP)一、面向过程与面向对象二、Java基本元素:类和对象三、对象的创建与使用1.对象的使用2.内存解析3.匿名对象四、类的成员1.属性1.1概念1.2分类2.方法2.1声明格式2.2方法的重载2.3可变形参的方法2.4方法参数的值传递机制2.5递归方法3.构造器4.代码块5.......
  • java 21 虚拟线程初体验
    基本特性,前提知识https://openjdk.org/jeps/444https://www.cnblogs.com/didispace/p/17735173.html不适应场景java21不适合CPU密集计算型任务,不过绝大多数的使用都不会是cpu密集计算场景......
  • Enhancing ID and Text Fusion via Alternative Training in Session-based Recommend
    目录概MotivationAlterRec代码LiJ.,HanH.,ChenZ.,ShomerH.,JinW.,JavariA.andTangJ.EnhancingIDandtextfusionviaalternativetraininginsession-basedrecommendation.2024.概作者“发现”多模态推荐中ID和文本模态的结合做的并不好,于是乎提出......