Validation of a Password - Python

前端 未结 11 1950
自闭症患者
自闭症患者 2020-11-27 08:20

So I have to create code that validate whether a password:

  • Is at least 8 characters long
  • Contains at least 1 number
  • Contains at least 1
相关标签:
11条回答
  • 2020-11-27 08:25

    Python 2.7 The for loop will assign a condition number for each character. i.e. Pa$$w0rd in a list would = 1,2,4,4,2,3,2,2,5. Since sets only contains unique values, the set would = 1,2,3,4,5; therefore since all conditions are met the len of the set would = 5. if it was pa$$w the set would = 2,4 and len would = 2 therefore invalid

    name = raw_input("Enter a Password: ")
    list_pass=set()
    special_char=['#','$','@']
    for i in name:
        if(i.isupper()):
          list_pass.add('1')
      elif (i.islower()):
          list_pass.add('2')
      elif(i.isdigit()) :
          list_pass.add('3')
      elif(i in special_char):
          list_pass.add('4')
    if len(name) >=6 and len(name) <=12:
        list_pass.add('5')
    if len(list_pass) is 5:
        print ("Password valid")
    else: print("Password invalid")
    
    0 讨论(0)
  • 2020-11-27 08:26

    You can use re module for regular expressions.

    With it your code would look like this:

    import re
    
    def validate():
        while True:
            password = raw_input("Enter a password: ")
            if len(password) < 8:
                print("Make sure your password is at lest 8 letters")
            elif re.search('[0-9]',password) is None:
                print("Make sure your password has a number in it")
            elif re.search('[A-Z]',password) is None: 
                print("Make sure your password has a capital letter in it")
            else:
                print("Your password seems fine")
                break
    
    validate()
    
    0 讨论(0)
  • 2020-11-27 08:29
    r_p = re.compile('^(?=\S{6,20}$)(?=.*?\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[^A-Za-z\s0-9])')
    

    this code will validate your password with :

    1. min length is 6 and max length is 20
    2. at least include a digit number,
    3. at least a upcase and a lowcase letter
    4. at least a special characters
    0 讨论(0)
  • 2020-11-27 08:29

    You are checking isdigit and isupper methods on the entire password string object not on each character of the string. The following is a function which checks if the password meets your specific requirements. It does not use any regex stuff. It also prints all the defects of the entered password.

    #!/usr/bin/python3
    def passwd_check(passwd):
        """Check if the password is valid.
    
        This function checks the following conditions
        if its length is greater than 6 and less than 8
        if it has at least one uppercase letter
        if it has at least one lowercase letter
        if it has at least one numeral
        if it has any of the required special symbols
        """
        SpecialSym=['$','@','#']
        return_val=True
        if len(passwd) < 6:
            print('the length of password should be at least 6 char long')
            return_val=False
        if len(passwd) > 8:
            print('the length of password should be not be greater than 8')
            return_val=False
        if not any(char.isdigit() for char in passwd):
            print('the password should have at least one numeral')
            return_val=False
        if not any(char.isupper() for char in passwd):
            print('the password should have at least one uppercase letter')
            return_val=False
        if not any(char.islower() for char in passwd):
            print('the password should have at least one lowercase letter')
            return_val=False
        if not any(char in SpecialSym for char in passwd):
            print('the password should have at least one of the symbols $@#')
            return_val=False
        if return_val:
            print('Ok')
        return return_val
    
    print(passwd_check.__doc__)
    passwd = input('enter the password : ')
    print(passwd_check(passwd))
    
    0 讨论(0)
  • 2020-11-27 08:34
    • isdigit() checks the whole string is a digit, not if the string contains a digit

      Return true if all characters in the string are digits and there is at least one character, false otherwise.

    • isupper() checks the whole string is in uppercase, not if the string contains at least one uppercase character.

      Return true if all cased characters in the string are uppercase and there is at least one cased character, false otherwise.

    What you need is using the any built-in function:

    • any([x.isdigit() for x in password]) will return True if at least one digit is present in password
    • any([x.isupper() for x in password]) will return True if at least one character is considered as uppercase.
    0 讨论(0)
  • 2020-11-27 08:35

    Example:

    class Password:
        def __init__(self, password):
            self.password = password
    
        def validate(self):        
            vals = {
            'Password must contain an uppercase letter.': lambda s: any(x.isupper() for x in s),
            'Password must contain a lowercase letter.': lambda s: any(x.islower() for x in s),
            'Password must contain a digit.': lambda s: any(x.isdigit() for x in s),
            'Password must be at least 8 characters.': lambda s: len(s) >= 8,
            'Password cannot contain white spaces.': lambda s: not any(x.isspace() for x in s)            
            } 
            valid = True  
            for n, val in vals.items():                         
               if not val(self.password):                   
                   valid = False
                   return n
            return valid                
    
        def compare(self, password2):
            if self.password == password2:
                return True
    
    
    if __name__ == '__main__':
        input_password = input('Insert Password: ')
        input_password2 = input('Repeat Password: ')
        p = Password(input_password)
        if p.validate() is True:
            if p.compare(input_password2) is True:
                print('OK')
        else:
           print(p.validate())
    
    0 讨论(0)
提交回复
热议问题