Files
medical_training/apps/user/utils/password.py
T

37 lines
1.1 KiB
Python

import re
from typing import Callable, Optional
def validate_password_strength(
password: str,
phone: Optional[str] = None,
real_name: Optional[str] = None,
old_password_check: Optional[Callable[[str], bool]] = None,
) -> list:
"""
校验密码强度,返回错误信息列表。列表为空表示通过。
old_password_check: 传入 password 返回 True 表示与旧密码相同。
"""
errors = []
if len(password) < 8 or len(password) > 32:
errors.append('密码长度必须在 8-32 位之间')
if not re.search(r'[a-zA-Z]', password):
errors.append('密码必须包含字母')
if not re.search(r'\d', password):
errors.append('密码必须包含数字')
if phone and password == phone:
errors.append('密码不能与手机号相同')
if real_name and password == real_name:
errors.append('密码不能与真实姓名相同')
if old_password_check is not None and old_password_check(password):
errors.append('新密码不能与旧密码相同')
return errors