"""密码强度校验策略:拒绝常见弱密码,要求字母+数字组合。""" import re WEAK_PATTERNS = [ "123456", "123456789", "password", "111111", "000000", "888888", "abc123", "qwerty", "654321", "12345678", "1234567", "admin", ] CONSECUTIVE = ["0123456789", "9876543210", "abcdef", "qwerty", "asdfgh"] def validate_password_strength(password: str) -> str | None: """返回错误提示;通过则返回 None。要求至少 6 位且含字母与数字。""" if not password or len(password) < 6: return "密码至少需要 6 个字符" low = password.lower() if low in WEAK_PATTERNS: return "密码过于简单,请使用更复杂的密码" if any(seq in low for seq in CONSECUTIVE): return "密码包含连续字符,请更换" has_letter = bool(re.search(r"[a-zA-Z]", password)) has_digit = bool(re.search(r"\d", password)) if not has_letter: return "密码必须包含字母" if not has_digit: return "密码必须包含数字" return None