Password Strength Checker

UpComing SoftWare Training Demos

🚀 *Playwright With AI Testing Demo In Telugu*
🗓️ *Date:* 28 Oct2026, 08:00 PM IST
📝 *Register Now!:*
https://www.vlrt.in/3r
👥 *Join WA Community:*
https://www.vlrt.in/3w
💡 *Course Content:*
https://www.vlrt.in/3c
▶️ *Demo Videos:*
https://www.vlrt.in/3v

🚀 *Gen AI Engineer (Production Focused)*
🗓️ *Date:* 29th Oct 2026, 06:00PM IST
📝 *Register Now!:*
https://www.vlrt.in/gr
👥 *Join WA Community:*
https://www.vlrt.in/gw
💡*Course Content:*
https://www.vlrt.in/ai
▶️ *Demo Videos:*
https://www.vlrt.in/gv

🚀 *Vulnerability Management Training Demo*
🗓️ *Date:* 28th Oct 2026, 10:00 AM IST
📝*Register Now!:*
https://www.vlrt.in/vr
👥 *Join Community:*
https://www.vlrt.in/cw
💡 *Course Content:*
https://www.vlrt.in/vc
▶️ *Demo Videos:*
https://www.vlrt.in/Vm

python

def is_strong(password):
    msg = 'Password must contain at least'
    if len(password) < 8:
        return False, msg + " 8 characters"

    has_upper = any(c.isupper() for c in password)
    has_lower = any(c.islower() for c in password)
    has_digit = any(c.isdigit() for c in password)
    special_chars = set("!@#$%^&*-_+=")
    has_special = any(c in special_chars for c in password)

    if not has_upper:
        return False, msg + " one uppercase letter."
    if not has_lower:
        return False, msg + " one lowercase letter."
    if not has_digit:
        return False, msg + " one digit."
    if not has_special:
        return False, msg + " one special char (!@#$%^&*-_+=)"

    return True, "Password is strong!"

password = input("Enter your password: ")
valid, message = is_strong(password)
print(message)

Enhanced Password Strength Checker

python

import re

def is_strong(password):
    """
    Check if a password is strong based on multiple criteria.
    Returns (is_valid, message) tuple.
    """
    # Define criteria and error messages
    criteria = [
        {
            'check': len(password) >= 8,
            'message': "at least 8 characters"
        },
        {
            'check': bool(re.search(r'[A-Z]', password)),
            'message': "one uppercase letter (A-Z)"
        },
        {
            'check': bool(re.search(r'[a-z]', password)),
            'message': "one lowercase letter (a-z)"
        },
        {
            'check': bool(re.search(r'[0-9]', password)),
            'message': "one digit (0-9)"
        },
        {
            'check': bool(re.search(r'[!@#$%^&*\-_+=]', password)),
            'message': "one special character (!@#$%^&*-_+=)"
        }
    ]
    
    # Check all criteria
    failed_checks = [criterion['message'] for criterion in criteria if not criterion['check']]
    
    if failed_checks:
        error_msg = "Password must contain:\n" + "\n".join(f"• {msg}" for msg in failed_checks)
        return False, error_msg
    
    return True, "✅ Password is strong!"

def get_password_strength_score(password):
    """
    Calculate a password strength score (0-100)
    """
    score = 0
    
    # Length score (max 25 points)
    length = len(password)
    if length >= 12:
        score += 25
    elif length >= 8:
        score += 15
    elif length >= 6:
        score += 5
    
    # Character variety score (max 75 points)
    checks = [
        bool(re.search(r'[A-Z]', password)),  # Uppercase
        bool(re.search(r'[a-z]', password)),  # Lowercase
        bool(re.search(r'[0-9]', password)),  # Digits
        bool(re.search(r'[!@#$%^&*\-_+=]', password)),  # Special chars
        len(set(password)) / len(password) > 0.7  # Character diversity
    ]
    
    score += sum(15 for check in checks if check)  # 15 points per met criteria
    
    return min(score, 100)

def suggest_strong_password():
    """
    Generate a strong password suggestion
    """
    import random
    import string
    
    # Define character sets
    uppercase = string.ascii_uppercase
    lowercase = string.ascii_lowercase
    digits = string.digits
    special_chars = "!@#$%^&*-_+="
    
    # Generate password with at least one of each type
    password = [
        random.choice(uppercase),
        random.choice(lowercase),
        random.choice(digits),
        random.choice(special_chars)
    ]
    
    # Add more random characters to reach 12 characters
    all_chars = uppercase + lowercase + digits + special_chars
    password.extend(random.choice(all_chars) for _ in range(8))
    
    # Shuffle the password
    random.shuffle(password)
    
    return ''.join(password)

def password_strength_checker():
    """
    Interactive password strength checker
    """
    print("🔐 Password Strength Checker")
    print("=" * 40)
    print("Requirements:")
    print("• At least 8 characters")
    print("• Uppercase and lowercase letters")
    print("• At least one digit")
    print("• At least one special character (!@#$%^&*-_+=)")
    print("Type 'quit' to exit\n")
    
    while True:
        password = input("Enter your password: ").strip()
        
        if password.lower() in ['quit', 'exit', 'q']:
            print("Goodbye! 👋")
            break
        
        if not password:
            print("Please enter a password!")
            continue
        
        # Check password strength
        is_valid, message = is_strong(password)
        strength_score = get_password_strength_score(password)
        
        print(f"\n📊 Password Analysis:")
        print(f"Strength Score: {strength_score}/100")
        
        if is_valid:
            print("✅ " + message)
            if strength_score >= 80:
                print("🎉 Excellent password!")
            elif strength_score >= 60:
                print("👍 Good password!")
            else:
                print("💪 Password meets minimum requirements")
        else:
            print("❌ Password is weak!")
            print(message)
        
        # Offer suggestion
        if not is_valid or strength_score < 60:
            suggest = input("\nWould you like a strong password suggestion? (y/n): ").lower()
            if suggest in ['y', 'yes']:
                suggested = suggest_strong_password()
                print(f"💡 Suggested strong password: {suggested}")
                print("(Copy this password and use it securely)")
        
        print("-" * 40)

# Quick test function
def test_passwords():
    """
    Test various passwords
    """
    test_cases = [
        "weak",           # Too short
        "weakpassword",   # No uppercase, digits, or special
        "WeakPassword",   # No digits or special
        "Weak123",        # Too short, no special
        "Weak123!",       # Meets all criteria
        "VeryStrongPassword123!@#",  # Very strong
        "abc123",         # No uppercase, no special
        "ABC123!",        # No lowercase
    ]
    
    print("🧪 Password Test Cases:")
    print("=" * 50)
    
    for password in test_cases:
        is_valid, message = is_strong(password)
        score = get_password_strength_score(password)
        status = "✅ STRONG" if is_valid else "❌ WEAK"
        print(f"{password:25} -> {status} (Score: {score}/100)")
        if not is_valid:
            print(f"   Reasons: {message.split(':', 1)[1].strip()}")

if __name__ == "__main__":
    # Run interactive checker
    password_strength_checker()
    
    # Uncomment to run test cases
    # test_passwords()

Simple Version (Similar to Original)

python

import re

def is_strong(password):
    """
    Enhanced version of the original function with better error messages
    """
    if len(password) < 8:
        return False, "Password must contain at least 8 characters"
    
    checks = [
        (bool(re.search(r'[A-Z]', password)), "one uppercase letter (A-Z)"),
        (bool(re.search(r'[a-z]', password)), "one lowercase letter (a-z)"),
        (bool(re.search(r'[0-9]', password)), "one digit (0-9)"),
        (bool(re.search(r'[!@#$%^&*\-_+=]', password)), "one special character (!@#$%^&*-_+=)")
    ]
    
    missing = [msg for check, msg in checks if not check]
    
    if missing:
        error_msg = "Password must contain:\n" + "\n".join(f"• {msg}" for msg in missing)
        return False, error_msg
    
    return True, "✅ Password is strong!"

# Main program
if __name__ == "__main__":
    password = input("Enter your password: ")
    valid, message = is_strong(password)
    print(message)

Key Improvements:

  1. Better Error Messages: Shows all missing requirements at once
  2. Regex Validation: More efficient character checking
  3. Strength Scoring: Quantitative strength measurement (0-100)
  4. Password Suggestions: Generates strong password suggestions
  5. Interactive Interface: User-friendly command-line interface
  6. Testing Function: Built-in test cases
  7. Character Diversity: Checks for repeated characters
  8. Modular Design: Separate functions for different functionalities

Example Output:

text

🔐 Password Strength Checker
========================================
Requirements:
• At least 8 characters
• Uppercase and lowercase letters
• At least one digit
• At least one special character (!@#$%^&*-_+=)
Type 'quit' to exit

Enter your password: weakpass

📊 Password Analysis:
Strength Score: 20/100
❌ Password is weak!
Password must contain:
• one uppercase letter (A-Z)
• one digit (0-9)
• one special character (!@#$%^&*-_+=)

Would you like a strong password suggestion? (y/n): y
💡 Suggested strong password: X7g!k9@Lp2$q

This enhanced version provides much more detailed feedback and helpful features while maintaining the same core functionality as the original program!

Similar Posts

  • Curly Braces {} ,Pipe (|) Metacharacters

    Curly Braces {} in Python Regex Curly braces {} are used to specify exact quantity of the preceding character or group. They define how many times something should appear. Basic Syntax: Example 1: Exact Number of Digits python import re text = “Zip codes: 12345, 9876, 123, 123456, 90210″ # Match exactly 5 digits pattern = r”\d{5}” # Exactly…

  • Type Conversion Functions

    Type Conversion Functions in Python 🔄 Type conversion (or type casting) transforms data from one type to another. Python provides built-in functions for these conversions. Here’s a comprehensive guide with examples: 1. int(x) 🔢 Converts x to an integer. Python 2. float(x) afloat Converts x to a floating-point number. Python 3. str(x) 💬 Converts x…

  • Linear vs. Scalar,Homogeneous vs. Heterogeneous 

    Linear vs. Scalar Data Types in Python In programming, data types can be categorized based on how they store and organize data. Two important classifications are scalar (atomic) types and linear (compound) types. 1. Scalar (Atomic) Data Types 2. Linear (Compound/Sequential) Data Types Key Differences Between Scalar and Linear Data Types Feature Scalar (Atomic) Linear (Compound) Stores Single…

  • Challenge Summary: Inheritance – Polygon and Triangle Classes

    Challenge Summary: Inheritance – Polygon and Triangle Classes Objective: Create two classes where Triangle inherits from Polygon and calculates area using Heron’s formula. 1. Polygon Class (Base Class) Properties: Methods: __init__(self, num_sides, *sides) python class Polygon: def __init__(self, num_sides, *sides): self.number_of_sides = num_sides self.sides = list(sides) 2. Triangle Class (Derived Class) Inheritance: Methods: __init__(self, *sides) area(self) python import math…

  • Formatted printing

    C-Style String Formatting in Python Python supports C-style string formatting using the % operator, which provides similar functionality to C’s printf() function. This method is sometimes called “old-style” string formatting but remains useful in many scenarios. Basic Syntax python “format string” % (values) Control Characters (Format Specifiers) Format Specifier Description Example Output %s String “%s” % “hello” hello %d…

  • re.subn()

    Python re.subn() Method Explained The re.subn() method is similar to re.sub() but with one key difference: it returns a tuple containing both the modified string and the number of substitutions made. This is useful when you need to know how many replacements occurred. Syntax python re.subn(pattern, repl, string, count=0, flags=0) Returns: (modified_string, number_of_substitutions) Example 1: Basic Usage with Count Tracking python import re…

Leave a Reply

Your email address will not be published. Required fields are marked *