databank-extension/scripts/contraseñaSeguras.js

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 }