用户密码复杂度验证 (封装成函数)
•
长度超过8位(必须) +1分
•
包括大、小写字母.数字.其它符号,以上四种至少三种 +1分
•
不能有长度超过或等于3的子串重复 +1分
•
密码的评分等级,默认2分,以上条件满足一条加1分
•
返回密码的评分等级,及要改进的点:
•
如 return 3, ['长度小于8', '密码没有由3种以上字符组成'
password = input("Please input your password: ")
score = 2
reason=[]
def verify_len(str):
if len(str)>8:
global score
score += 1
else:
reason.append('长度小于8')
def verify_kind(str):
num = 0
for i in str:
if i.isdigit():
num += 1
break
for i in str:
if i.isupper():
num += 1
break
for i in str:
if i.islower():
num += 1
break
for i in str:
if i.isdigit() == False and i.isalpha() == False:
num += 1
break
if num > 2:
global score
score += 1
else:
reason.append('密码由3种以下字符组成')
def cut2(s: str):
global results
results = []
# x + 1 表示子字符串长度
for x in range(len(s)):
# i 表示偏移量
for i in range(len(s) - x):
if x == 0:
results.append(s[i:i + x + 1])
elif x < 2:
for j in range(len(s) - x - i):
results.append(s[i] + s[j + x + i])
else:
for j in range(len(s) - x - i):
results.append(s[i:i+x] + s[j + x + i])
def verify_son():
cut2(password)
num = 0
for i in results:
if len(i)>2:
if results.count(i)>1:
print(i)
reason.append("有超过长度为2的子串重复")
num = 1
break
if num == 0 and len(password) >8:
global score
score += 1
verify_len(password)
verify_kind(password)
verify_son()
print(score)
print(reason)