簡體   English   中英

創建一個強密碼[Python]

[英]creating a strong password [Python]

需要創建一個函數來驗證我的密碼強度是否遇到第三個問題。

  1. 輸入的兩個密碼是相同的。
  2. 密碼長度> = 8個字符。

3.如果密碼的第一個和最后一個字符是字母,那么無論大小寫如何,密碼的第一個字符必須與密碼的最后一個字符不同。 例如,第一個字符為A,因此最后一個字符不能為A或a。

def validate_password(first_pwd, second_pwd):
    #Checks if password are same
    if first_pwd == second_pwd:
        #Checks if password is greater or equal to 8 characters
        if len(first_pwd) >= 8:
            #Checks if last and first character are alphabetic 
            if first_pwd[0].islower() and first_pwd[-1].isupper() or first_pwd[0].isupper() and first_pwd[-1].islower():
                return True
            else:
                return False


print(validate_password("Abcd1234","Abcd1234"))

如何忽略密碼末尾的數字,並查看最接近的字母d。

您可以嘗試使用正則表達式解決它。 這將檢查字母的第一次出現是否等於(不區分大小寫)字母的最后一次出現。

如果您確實只想檢查字符串的第一個字符或最后一個字符,則必須改編正則表達式或if子句。
您還可以進行額外的檢查,以查看pwd中的最后一個字符是否等於下面列表中的chars的最后一個字母。

import re

def validate_password(first_pwd, second_pwd):
# Checks if password are same
if first_pwd == second_pwd:
    # Checks if password is greater or equal to 8 characters
    if len(first_pwd) >= 8:
        # get only the letters of the password
        chars = re.findall(r'[A-Za-z]', first_pwd)
        # compare first and last occurrence of letters in pwd
        if chars[0].islower() and chars[-1].isupper() or chars[0].isupper() and chars[-1].islower():
            return True
        else:
            return False


print(validate_password("Abcd1234","Abcd1234"))

我也認為,僅檢查一下就足夠了

if chars[0].upper() == chars[-1].upper(): # optional if needed: and first_pwd[-1].upper() == chars[-1].upper()

我不是專家,但是作為一個嘗試不斷改進python的人,建議您寫出單詞而不是使用縮寫。

此外,您還可以使用其他功能來驗證是否僅在密碼與先前的密碼相同的情況下才檢查密碼的強度,因此請確保在第一次檢查時所用的長度大於8

值得一看的事情是:

islower,isalpha 這里

與lower()在這里

我建議您使用正則表達式,因為這是一個很難的概念imo

import re

def validate_password(first_password, second_password):
    if first_password == second_password:
        # Cannot be the previous password
        return False

    letters = "".join(re.findall("[a-zA-Z]+", first_password))
    first_letter = letters[0]
    last_letter = letters[-1]
    if len(first_password) >= 8:
        if first_letter.lower() == last_letter.lower():
            # First character can't be the same as last character
            return False
        else:
            # Every test passed
            return True
    else:
        # password too short
        return False

print(validate_password("Abcd1234","Abcd1234"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM