Python实现注册账号系统密码验证模块编写

说明一下,这边只写了最基础密码验证模块,很多功能都没有完善,如果代码可能Bug,希望大家多多指正

需求:
1.提示输入用户名/密码(2次)
2.两次密码是否一致
3.用户密码复杂度验证
    a.长度超过8位
    b.包括大小写字母数字其他符号,以上四种至少三种
    c.不能有长度超过或等于3的字串重复
    d.密码评分等级,2分 => >=4 注册成功,否则注册失败
    e.提示用户分数和哪些地方需要改进的点,如return 4,['长度小于8','密码没有由4种字符组成']
4.提示注册成功

2.提示输入用户名/密码

这边代码实现就是直接让输入的两次密码作比较,如果一致那就正确,反之错误

password1 = input('请输入密码:')
password2 = input('请再次输入密码:')
if password1 == password2:
	print('正确')
else
	print('输入密码不一致')	

3.用户密码复杂度验证

a.长度超过8位

这边直接用if判断句就行了,直接获取密码值,然后做一个if判断就行了

if pass_wd == 8:
	print('正确')
else :
	pring('密码长度不够')

b.包括大小写字母数字其他符号,以上四种至少三种

这边其实是最复杂的一步了 ,其实这里的复杂点就是我们怎么知道输入的密码程序怎么识别这是字母、字符、数字
其实这边可以将他们全部转换成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则为不通过

c.不能有长度超过或等于3的字串重复

这里实现的思路是在一个循环种,每次取字符串前三个数,和后面的字符串做对比,如果前面的字符串没有在后面的字符串里,那么就没有重复的字符串,反之则有,注入这里只循环道密码字符串的前三位就好了,因为循环到最后三个字符串了,那么后面就没有字符串了,这样就肯定证明没有冗余字符串了
代码:

    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

d.密码评分等级,2分 => >=4 注册成功,否则注册失败

这边其实依靠上面的模块,如果上面模块成功那么就返回1,反之则0,那么就可以这个数字就可以作为评分等级的标准,将这些数字相加,那么就得到密码的评分了

    grade = 长度校验 + 复杂度校验 + 重复度校验 +2
    if grade >=4:
       print(f'注册成功,密码强度为{grade}')
    else:
        print('注册失败')

e.提示用户分数和哪些地方需要改进的点

这边还是通过前面的模块进行校验,如果长度校验没有通过,那么就给个输出说明长度不够,代码复杂度也是,这两点是必须项,如果没有那么就直接导致注册失败,但是复杂度可有可无,不影响注册,但是需要指出问题,这就是这个模块的作用

代码:

        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()

总结:这边写的时间很短,很多功能都没实现,就知识验证了密码逻辑连用户名都没验证,这边其实可以加很多东西,例如密码隐藏输入,多次注册啊等等,许多功能日后用着的时候再完善把

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值