75 lines
2.7 KiB
JavaScript
75 lines
2.7 KiB
JavaScript
|
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 }
|