本文目录导读:

在 Python 中隐藏手机号信息(脱敏处理)有多种方法,以下是几种常见的实现方式:
字符串切片替换法(最常用)
def hide_phone(phone):
"""保留前3位和后4位,中间用****隐藏"""
if len(phone) != 11:
return "手机号格式错误"
return phone[:3] + "****" + phone[7:]
# 示例
phone = "13812345678"
print(hide_phone(phone)) # 输出: 138****5678
正则表达式替换法
import re
def hide_phone_regex(phone):
"""使用正则表达式替换中间4位"""
pattern = r'(\d{3})\d{4}(\d{4})'
return re.sub(pattern, r'\1****\2', phone)
# 示例
phone = "13987654321"
print(hide_phone_regex(phone)) # 输出: 139****4321
可变隐藏位数法
def hide_phone_flexible(phone, start=3, end=4, hide_char='*'):
"""
可自定义隐藏位置和数量
:param phone: 手机号
:param start: 保留前几位
:param end: 保留后几位
:param hide_char: 隐藏字符
"""
if len(phone) != 11:
return "手机号格式错误"
hide_length = len(phone) - start - end
hidden_part = hide_char * hide_length
return phone[:start] + hidden_part + phone[-end:]
# 示例
print(hide_phone_flexible("13612345678")) # 136****5678
print(hide_phone_flexible("13612345678", 2, 3)) # 13*****678
批量处理列表中的手机号
def batch_hide_phones(phone_list):
"""批量隐藏手机号列表"""
hidden_list = []
for phone in phone_list:
hidden_list.append(hide_phone(phone))
return hidden_list
# 示例
phones = ["13811112222", "13933334444", "13755556666"]
hidden_phones = batch_hide_phones(phones)
print(hidden_phones) # 输出: ['138****2222', '139****4444', '137****6666']
使用 Pandas 处理 DataFrame 中的手机号
import pandas as pd
# 创建示例数据
data = {
'name': ['张三', '李四', '王五'],
'phone': ['13811112222', '13933334444', '13755556666']
}
df = pd.DataFrame(data)
# 方法1:使用 apply 函数
df['phone_hidden'] = df['phone'].apply(lambda x: x[:3] + '****' + x[7:])
# 方法2:使用字符串切片
df['phone_hidden2'] = df['phone'].str[:3] + '****' + df['phone'].str[7:]
print(df)
带格式验证的完整版本
import re
class PhoneHider:
"""手机号隐藏工具类"""
@staticmethod
def is_valid_phone(phone):
"""验证手机号格式"""
# 简单的11位数字验证
return bool(re.match(r'^1[3-9]\d{9}$', phone))
@staticmethod
def hide(phone, hide_char='*'):
"""
隐藏手机号中间4位
:param phone: 手机号字符串
:param hide_char: 隐藏字符,默认*
:return: 隐藏后的手机号或错误信息
"""
if not isinstance(phone, str):
return "输入类型错误"
phone = phone.strip() # 去除首尾空格
if not PhoneHider.is_valid_phone(phone):
return "手机号格式不正确"
return phone[:3] + hide_char * 4 + phone[7:]
@staticmethod
def batch_hide(phones):
"""批量隐藏"""
return [PhoneHider.hide(phone) for phone in phones]
# 使用示例
hider = PhoneHider()
# 单个隐藏
print(hider.hide("13812345678")) # 138****5678
print(hider.hide("12345")) # 手机号格式不正确
print(hider.hide(13812345678)) # 输入类型错误
# 批量隐藏
test_phones = ["13811112222", "13933334444", "13755556666", "12345"]
results = hider.batch_hide(test_phones)
print(results) # 输出: ['138****2222', '139****4444', '137****6666', '手机号格式不正确']
输出到文件或日志时的隐藏
import logging
def log_with_hidden_phone(data):
"""
在日志中隐藏手机号信息
"""
# 假设数据格式为: {"name": "张三", "phone": "13812345678"}
if isinstance(data, dict) and 'phone' in data:
masked_data = data.copy()
masked_data['phone'] = hide_phone(data['phone'])
return masked_data
return data
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')
# 使用示例
user_data = {"name": "张三", "phone": "13812345678"}
logging.info(f"用户信息: {log_with_hidden_phone(user_data)}")
推荐使用方式
对于大多数场景,推荐使用最简单直接的字符串切片法:
def mask_phone(phone):
"""快速隐藏手机号"""
return phone[:3] + "****" + phone[7:] if len(phone) == 11 else phone
根据具体需求选择合适的方案:
- 简单场景:切片法或正则法
- 批量处理:使用列表推导式或 Pandas
- 需要验证:用完整版类方法
- 日志输出:使用专门的隐藏函数
这样可以有效保护用户隐私,同时保持数据可读性。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播