说明一下,这边只写了最基础密码验证模块,很多功能都没有完善,如果代码可能Bug,希望大家多多指正
需求:
1.提示输入用户名/密码(2次)
2.两次密码是否一致
3.用户密码复杂度验证
a.长度超过8位
b.包括大小写字母数字其他符号,以上四种至少三种
c.不能有长度超过或等于3的字串重复
d.密码评分等级,2分 => >=4 注册成功,否则注册失败
e.提示用户分数和哪些地方需要改进的点,如return 4,['长度小于8','密码没有由4种字符组成']
4.提示注册成功
这边代码实现就是直接让输入的两次密码作比较,如果一致那就正确,反之错误
password1 = input('请输入密码:')
password2 = input('请再次输入密码:')
if password1 == password2:
print('正确')
else
print('输入密码不一致')
这边直接用if判断句就行了,直接获取密码值,然后做一个if判断就行了
if pass_wd == 8:
print('正确')
else :
pring('密码长度不够')
这边其实是最复杂的一步了 ,其实这里的复杂点就是我们怎么知道输入的密码程序怎么识别这是字母、字符、数字
其实这边可以将他们全部转换成Assci码,这样就可以直接做判断了,这里用到了一个叫做ord()的函数
有关Assci表可以参照以下链接:
https://tool.oschina.net/commons?type=4
实现代码
number = 0
letter = 0
character = 0
for i in password:
if (ord(i) >= 48 and ord(i) <= 57): #判断是否为数字
number = 1
elif (ord(i) >= 65 and ord(i) <= 90) or (ord(i) >= 97 and ord(i) <= 122): #判断是否为大小写字母
letter = 1
elif ord(i) >= 33 and ord(i) <= 47 or ord(i) >= 58 and ord(i) <= 64 or ord(i) >= 91 or ord(i) <= 96: #判断是否为其他字符
character = 1
if number == 1 and letter == 1 and character == 1:
return 1 #返回1则为通过
else:
return 0 #返回0则为不通过
这里实现的思路是在一个循环种,每次取字符串前三个数,和后面的字符串做对比,如果前面的字符串没有在后面的字符串里,那么就没有重复的字符串,反之则有,注入这里只循环道密码字符串的前三位就好了,因为循环到最后三个字符串了,那么后面就没有字符串了,这样就肯定证明没有冗余字符串了
代码:
pass_len = len(password)
for i in range(pass_len - 4):
str1 = password[i:i + 3] #取前三个字符
str2 = password[i + 3:] #取后面的字符
if str1 in str2: #如果str1在str2里
return 0
这边其实依靠上面的模块,如果上面模块成功那么就返回1,反之则0,那么就可以这个数字就可以作为评分等级的标准,将这些数字相加,那么就得到密码的评分了
grade = 长度校验 + 复杂度校验 + 重复度校验 +2
if grade >=4:
print(f'注册成功,密码强度为{grade}')
else:
print('注册失败')
这边还是通过前面的模块进行校验,如果长度校验没有通过,那么就给个输出说明长度不够,代码复杂度也是,这两点是必须项,如果没有那么就直接导致注册失败,但是复杂度可有可无,不影响注册,但是需要指出问题,这就是这个模块的作用
代码:
if 长度不够:
print('密码长度不够,请增加密码长度')
if 密码复杂度不够:
print('密码复杂度不够,请增加密码复杂度')
if 密码重读度过高
print('密码重复度过高')
完整代码
'''长度校验'''
def lenth_check(password):
if len(password) >= 8:
return 1
else:
return 0
'''复杂度校验'''
def complex_check(password):
number = 0
letter = 0
character = 0
for i in password:
if (ord(i) >= 48 and ord(i) <= 57): #判断是否为数字
number = 1
elif (ord(i) >= 65 and ord(i) <= 90) or (ord(i) >= 97 and ord(i) <= 122): #判断是否为大小写字母
letter = 1
elif ord(i) >= 33 and ord(i) <= 47 or ord(i) >= 58 and ord(i) <= 64 or ord(i) >= 91 or ord(i) <= 96: #判断是否为其他字符
character = 1
if number == 1 and letter == 1 and character == 1:
return 1
else:
return 0
'''重复度校验'''
def repetition_check(password):
pass_len = len(password)
for i in range(pass_len - 4):
str1 = password[i:i + 3]
str2 = password[i + 3:]
if str1 in str2:
return 0
return 1
'''分数系统'''
def grade(password):
grade = lenth_check(password) + complex_check(password) + repetition_check(password) +2
if grade >=4:
if repetition_check(password) == 0:
print(f'注册成功,密码强度为{grade},但是密码重复度过高')
else:
print(f'注册成功,密码强度为{grade}')
else:
print('注册失败')
'''密码校验'''
def password_check():
user = input('请输入用户名:').replace(' ','')
password1 = input('请输入密码:').replace(' ','')# 去除密码中的空格
password2 = input('请再次输入密码:').replace(' ','')
if password1 == password2:
lenth_check(password1)
if lenth_check(password1) == 0:
print('密码长度不够,请增加密码长度')
complex_check(password1)
if complex_check(password1) == 0:
print('密码复杂度不够,请增加密码复杂度')
repetition_check(password1)
grade(password1)
else:
print('两次密码输入不一致')
password_check()
总结:这边写的时间很短,很多功能都没实现,就知识验证了密码逻辑连用户名都没验证,这边其实可以加很多东西,例如密码隐藏输入,多次注册啊等等,许多功能日后用着的时候再完善把