En retos anteriores has creado un generador de contraseñas, ahora validarás su nivel de seguridad. Así que tu programa debe recibir un string con una contraseña considerando los siguientes parámetros:
- Incluir al menos una letra minúscula
- Incluir al menos una letra mayúscula
- Incluir al menos un número
- Incluir al menos un caracter especial
- Tener una longitud mínima de 8 caracteres
Se evaluará la contraseña con las siguientes características: - Insegura: cumple con solo 2 o menos parámetros
- Medianamente segura: cumple de 3 o 4 parámetros
- Segura: cumple con todos los parámetros
Validador de contraseñas en JavaScript y en Python (use caracteres unicode como en el otro reto)
// Validador de Contraseñas en JavaScript// Caracteres UNICODE (32 - 126)// CODES_SYMBOLS1 = [32, 47]// CODES_NUMBERS = [48, 57]// CODES_SYMBOLS2 = [58, 64]// CODES_UPPERLETTERS = [65, 90]// CODES_SYMBOLS3 = [91, 96]// CODES_LOWERLETTERS = [97, 122]// CODES_SYMBOLS4 = [123, 126]functionvalidatePassword(password) { let parameters = 0let charCodes = password.split('').map(char => char.charCodeAt()) // ¿Incluye una letra minúscula?if (charCodes.find(charCode => charCode >= 97 && charCode <= 122)) { parameters++ } // ¿Incluye una letra mayúscula?if (charCodes.find(charCode => charCode >= 65 && charCode <= 90)) { parameters++ } // ¿Incluye un número?if (charCodes.find(charCode => charCode >= 48 && charCode <= 57)) { parameters++ } // ¿Incluye un caracter especial?if (charCodes.find(charCode => { return (charCode >= 32 && charCode <= 47) || (charCode >= 58 && charCode <= 64) || (charCode >= 91 && charCode <= 96) || (charCode >= 123 && charCode <= 126) })) { parameters++ } // ¿Tiene una longitud mínima de 8 caracteres?if (charCodes.length >= 8) { parameters++ } // ¿Cuántos parámetros cumple?if (parameters <= 2) { return'Contraseña insegura' } elseif (parameters >= 3 && parameters <= 4) { return'Contraseña medianamente segura' } elseif (parameters === 5) { return'Contraseña segura' } } console.log(validatePassword('hola')) // Contraseña inseguraconsole.log(validatePassword('abcde1234')) // Contraseña medianamente seguraconsole.log(validatePassword('[email protected]')) // Contraseña segura
# Validador de contraseñas en PythondefvalidatePassword(password): parameters = 0 charCodes = [] for char in password: charCodes.append(ord(char)) # ¿Incluye una letra minúscula?if (hasCharCodeBetween(charCodes, 97, 122)): parameters += 1# ¿Incluye una letra mayúscula?if (hasCharCodeBetween(charCodes, 65, 90)): parameters += 1# ¿Incluye un número?if (hasCharCodeBetween(charCodes, 48, 57)): parameters += 1# ¿Incluye un caracter especial?if (hasCharCodeBetween(charCodes, 32, 47) or hasCharCodeBetween(charCodes, 58, 64) or hasCharCodeBetween(charCodes, 91, 96) or hasCharCodeBetween(charCodes, 123, 126)): parameters += 1# ¿Tiene una longitud mínima de 8 caracteres?if (len(charCodes) >= 8): parameters += 1# ¿Cuántos parámetros cumple?if (parameters <= 2): return'Contraseña insegura'elif (parameters >= 3and parameters <= 4): return'Contraseña medianamente segura'elif (parameters == 5): return'Contraseña segura'defhasCharCodeBetween(charCodes, min, max):for charCode in charCodes: if charCode >= min and charCode <= max: returnTruereturnFalse print(validatePassword('hola')) # Contraseña insegura print(validatePassword('abcde1234')) # Contraseña medianamente segura print(validatePassword('[email protected]')) # Contraseña segura
En Python 😃
import random contraseña=input('INGRESA TU OPCIÓN DE CONTRASEÑA: ') minusculas=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] mayusculas=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] numeros=['1','2','4','5','6','7','8','9','0'] diccionario=[' ','|','°','¬','!','"','#','$','%','&','/','(',')','=','?','*','¿','¡','"','+','~','{','}','[',']',';',',',':','.','-','_','>','<'] cont=0 cont2=0 cont3=0 cont4=0 cont5=0for letra in contraseña: if letra in minusculas: if cont>=1: passelse: cont=cont+1elif letra in mayusculas: if cont2>=1: passelse: cont2=cont2+1elif letra in numeros: if cont3>=1: passelse: cont3=cont3+1elif letra in diccionario: if cont4>=1: passelse: cont4=cont4+1else: passif len(contraseña)>=8: cont5=cont5+1else: pass seguridad=cont+cont2+cont3+cont4+cont5 if seguridad<=2: print('Tu contraseña es insegura') elif seguridad==3or seguridad ==4: print('Tu contraseña es medianamente segura') elif seguridad>4: print('Tu contraseña es segura') else: pass
Respuesta:
<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Validador de contraseñas</title></head><style> * { margin: 0; } .contenedor { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100vh; } .inputs { display: flex; flex-flow: column; align-items: center; padding: 2rem; } .section { padding: 0.25rem2rem; display: flex; align-items: center; } .sectioninput, .sectionspan{ margin-left: 12px; font-weight: bold; } .btn { border: 2px solid black; border-radius: 6px; cursor: pointer; padding: 20px; } </style><body><divclass="contenedor"><h1style="margin-bottom: 24px;">Validador de contraseñas</h1><divclass="inputs"><sectionclass="section"> Ingresa la contraseña que deseas validar: <inputid="contra"placeholder="contraseña"/></section><sectionclass="section"><spanstyle="margin-right: 10px;"id='resultado'></span></section></div><buttononclick="validar()"class="btn">Validar...</button></div><script>const datos = { num: [48,49,50,51,52,53,54,55,56,57], min: [97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122], mayus: [65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90], esp: [32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,58,59,60,61,62,63,64,91,92,93,94,95,96,123,124,125,126] } let flags = { num: false, min: false, mayus: false, esp: false, long: false, } functionvalidar() { flags = { num: false, min: false, mayus: false, esp: false, long: false, } let contra = document.getElementById('contra').value.split('') contra.map( caracter => { let charCode = caracter.charCodeAt(0) revisar(charCode, 'num') revisar(charCode, 'min') revisar(charCode, 'mayus') revisar(charCode, 'esp') }) if (contra.length >= 8){ flags.long = true } let aciertos = 0let resultado = Object.values(flags) resultado.map(boolean => { if (boolean){ aciertos++ } }) if (aciertos <= 2){ alert('Contraseña insegura') } elseif (aciertos > 2 && aciertos <= 4){ alert('Contraseña medianamente segura') } elseif (aciertos === 5){ alert('Contraseña segura') } } functionrevisar(charCode, grupo){ datos[grupo].forEach( num => { if (num === charCode){ flags[grupo] = true } }) } </script></body></html>