let caracteresEspeciales_cantidad = 0; let numeros_cantidad = 0; let mayusculas_cantidad = 0; let minusculas_cantidad = 0; let longitud_contraseña = 25; //Longitud let contraseña = new Array(); //Contraseña final let caracteres_especiales = '!^$+=#€?@'; let numeros = '0123456789'; let mayusculas = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'; let minusculas = 'abcdefghijklmnopqrstuvwxyz'; let cadenaAleatoria = '!^$+=#€?@0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ'; const shuffleArray = array => { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); const temp = array[i]; array[i] = array[j]; array[j] = temp; } } function rellenarContraseña(longitud){ longitud_contraseña = longitud; cantidad(); let index = {index : 0}; //Para poder pasar por referencia relleno(caracteresEspeciales_cantidad, caracteres_especiales, index); relleno(numeros_cantidad, numeros, index); relleno(mayusculas_cantidad, mayusculas, index); relleno(minusculas_cantidad, minusculas, index); if(contraseña.length < longitud_contraseña){ let diferencia = longitud_contraseña - contraseña.length; relleno(diferencia,cadenaAleatoria, index); } shuffleArray(contraseña); let cadena = contraseña.toString(); cadena = cadena.replaceAll(',', ''); return cadena; } function cantidad(){ caracteresEspeciales_cantidad = Math.floor(Math.random()*(20-15+1)+15) * (longitud_contraseña/100); numeros_cantidad = Math.floor(Math.random()*(25-20+1)+20) * (longitud_contraseña/100); mayusculas_cantidad = Math.floor(Math.random()*(25-20+1)+20) * (longitud_contraseña/100); minusculas_cantidad = Math.floor(Math.random()*(30-25+1)+25) * (longitud_contraseña/100); caracteresEspeciales_cantidad = caracteresEspeciales_cantidad % 1 < 0.5 ? Math.trunc(caracteresEspeciales_cantidad) : Math.ceil(caracteresEspeciales_cantidad); numeros_cantidad = numeros_cantidad % 1 < 0.5 ? Math.trunc(numeros_cantidad) : Math.ceil(numeros_cantidad); mayusculas_cantidad = mayusculas_cantidad % 1 < 0.5 ? Math.trunc(mayusculas_cantidad) : Math.ceil(mayusculas_cantidad); minusculas_cantidad = minusculas_cantidad % 1 < 0.5 ? Math.trunc(minusculas_cantidad) : Math.ceil(minusculas_cantidad); } function relleno(cantidad, cadena, index){ let longitud = cadena.length-1; let i = index.index; while(cantidad !== 0){ //Se puede hacer ya que cantidad no se pasa por referencia si no por valor. contraseña.push(cadena.charAt(Math.floor(Math.random()*(longitud-0+1)+0))); i++; cantidad--; } index.index = i; } export { rellenarContraseña }