function toHex(value, length) {
return value.toString(16).toUpperCase().padStart(length, "0");
}
function sumNombre8(nombre) {
let suma = 0;
for (let i = 0; i < nombre.length; i++) {
suma = (suma + nombre.charCodeAt(i)) & 0xFF;
}
return suma;
}
function generarSeriales(nombre) {
const sum8 = sumNombre8(nombre);
const seriales = [];
for (let a = sum8 - 4; a <= sum8 + 4; a++) {
if (a < 0 || a > 0xFF) continue;
// Para que b sea entero, a debe ser múltiplo de 4
if (a % 4 !== 0) continue;
const a2 = a * a;
const numerador = a2 - 64;
if (numerador < 0) continue;
if (numerador % 16 !== 0) continue;
const b = numerador / 16;
const c = b + 8;
// Ajuste a formato aa bbbb cccc
if (b < 0 || b > 0xFFFF) continue;
if (c < 0 || c > 0xFFFF) continue;
const serial =
toHex(a, 2) +
toHex(b, 4) +
toHex(c, 4);
seriales.push({
nombre: nombre,
sum8: toHex(sum8, 2),
a: toHex(a, 2),
b: toHex(b, 4),
c: toHex(c, 4),
serial: serial
});
}
return seriales;
}
// Ejemplo
const nombre = "deurus2026";
const resultados = generarSeriales(nombre);
if (resultados.length === 0) {
console.log("No se han encontrado seriales válidos.");
} else {
console.log(`Nombre: ${nombre}`);
console.log(`SUMNOMBRE (8 bits): ${resultados[0].sum8}`);
console.log("");
for (const r of resultados) {
console.log(
`a=${r.a} b=${r.b} c=${r.c} -> Serial: ${r.serial}`
);
}
}