基于Python实现PDF文件个人隐私信息检查

使用Python进行PDF隐私信息检测

随着个人信息安全越来越受重视,检测PDF文件中的隐私信息(如身份证号、手机号、邮箱等)变得尤为重要。以下是如何使用Python进行PDF隐私信息检测的具体内容。
需要最终运行版软件的可以留言邮箱。

1. 安装必要库

复制代码
pip install pdfplumber PyPDF2 regex

2.提取PDF文本内容

复制代码
import pdfplumber

def extract_text_from_pdf(file_path):
    """从PDF文件中提取文本内容"""
    text = ""
    with pdfplumber.open(file_path) as pdf:
        for page in pdf.pages:
            text += page.extract_text() + "\n"
    return text

# 使用示例
pdf_file_path = "example.pdf"
text = extract_text_from_pdf(pdf_file_path)
print(text)

3.检测隐私信息

复制代码
import re

def detect_sensitive_info(text):
    """检测文本中的隐私信息"""
    # 定义常见隐私信息的正则表达式模式
    patterns = {
        "身份证号": r"([1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}([0-9]|X|x))",
        "手机号": r"1[3-9]\d{9}",
        "邮箱": r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+",
        "姓名": r"([A-Za-z]{2,10})\s+([A-Za-z]{2,10})"  # 简单姓名匹配
    }
    
    results = {}
    
    for info_type, pattern in patterns.items():
        matches = re.findall(pattern, text)
        if matches:
            results[info_type] = matches
    
    return results

# 使用示例
sensitive_info = detect_sensitive_info(text)
for info_type, matches in sensitive_info.items():
    print(f"检测到{info_type}:{matches}")

4.完整GUI应用示例

GUI版本需要安装wxPython,执行pip install wxPython完成安装。如已安装请忽略。

复制代码
import wx
import pdfplumber
import re

class PDFPrivacyChecker(wx.Frame):
    def __init__(self):
        super().__init__(None, title="PDF个人隐私检查", size=(600, 400))
        
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        # 选择文件按钮
        self.btn_select = wx.Button(panel, label="选择PDF文件")
        self.btn_select.Bind(wx.EVT_BUTTON, self.on_select_file)
        vbox.Add(self.btn_select, 0, wx.ALL | wx.CENTER, 5)
        
        # 结果显示区域
        self.result_text = wx.TextCtrl(panel, style=wx.TE_READONLY | wx.TE_MULTILINE)
        vbox.Add(self.result_text, 1, wx.EXPAND | wx.ALL, 5)
        
        # 布局
        panel.SetSizer(vbox)
        self.Centre()
        self.Show()

    def on_select_file(self, event):
        with wx.FileDialog(self, "选择PDF文件", wildcard="PDF files (*.pdf)|*.pdf",
                          style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:
            if fileDialog.ShowModal() == wx.ID_CANCEL:
                return
            
            file_path = fileDialog.GetPath()
            text = self.extract_text_from_pdf(file_path)
            results = self.detect_sensitive_info(text)
            
            if results:
                self.result_text.SetValue("检测到以下隐私信息:\n")
                for info_type, matches in results.items():
                    self.result_text.AppendText(f"{info_type}: {matches}\n")
            else:
                self.result_text.SetValue("未检测到隐私信息")

    def extract_text_from_pdf(self, file_path):
        """从PDF文件中提取文本内容"""
        text = ""
        with pdfplumber.open(file_path) as pdf:
            for page in pdf.pages:
                text += page.extract_text() + "\n"
        return text

    def detect_sensitive_info(self, text):
        """检测文本中的隐私信息"""
        patterns = {
            "身份证号": r"([1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}([0-9]|X|x))",
            "手机号": r"1[3-9]\d{9}",
            "邮箱": r"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
        }
        
        results = {}
        
        for info_type, pattern in patterns.items():
            matches = re.findall(pattern, text)
            if matches:
                results[info_type] = matches
        
        return results

if __name__ == "__main__":
    app = wx.App(False)
    frame = PDFPrivacyChecker()
    app.MainLoop()

5.执行结果示例如下

相关推荐
华研前沿标杆游学5 分钟前
【标杆研学】走进茅台集团|对标学习长期主义与匠心精神
python
阿里嘎多学长12 分钟前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管
GitFun43 分钟前
KDJ vs RSI:11年数据实测,金叉死叉输了48个点
python·股票·量化交易
李可以量化1 小时前
从零读懂配对交易(上):从套利本源到配对交易的核心逻辑
python·区块链·量化交易·通达信·qmt
CCblandy1 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
wangchunyu1141 小时前
Python 数据可视化实战入门教程
开发语言·python·信息可视化
蜗牛互联网1 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python
SL_staff1 小时前
当规则引擎开始‘懂业务’:JVS-Rules金融风控四大原生能力拆解
java·python·全栈
蚰蜒螟2 小时前
从内核启动到 Java NIO:一次 socket accept 的源码串联之旅
java·python·nio
学逆向的2 小时前
C 突破编译器限制
c语言·开发语言·网络安全