Hola,
Ya me estoy volviendo loco. Resulta que utilizo el "JvSerialMaker" desde hace cierto tiempo... y me ha dado por comprobar en un antiguo programa que lo utilizaba a ver si era capaz de sacar el número de serie de la memoria... ¡pero no he podido hacerlo!
Y a dios pongo por testigo que ambos programas: tanto el antiguo como el nuevo, utilizan el mismo sistema... eso sí, el antiguo utiliza el "JvSerialMaker" tal cual, y este nuevo utiliza una "adaptación" que le he hecho por mi cuenta... ¡pero los métodos para generar el número de serie y para comprobarlo son prácticamente iguales!
No cambia nada. De hecho la adaptación que he hecho de "JvSerialMaker" se limita a desligarlo de la Jedi VCL (quitando toda referencia a esta) y a retirar las propiedades del componente para quedarme sólo con los dos métodos comentados.
¿Y sin embargo en el programa antiguo no consigo ver el número de serie en la memoria y en el programa nuevo sí? ¡Esto es de locos!
Sé que no es de locos, sino todo lo contrario. Pero yo estoy cansado. Y así me las gasto en estas circustancias...
Aquí puede verse la adaptación de "JvSerialMaker" que llevo a cabo; compárese con el "JvSerialMaker" original... yo creo que no hay cambio que justifique que ahora el sistema se haya vuelto "inseguro"...
Código Delphi
[-]
unit UGeneradorSeriales;
interface
type
TGeneradorSeriales = class
public
function ObtenerNumeroSerie(numeroBase:integer;
claveUsuario: string): string;
function ComprobarNumeroSerie(numeroBase: integer;
claveUsuario: string; numeroSerie: string): boolean;
end;
implementation
uses
SysUtils;
function TGeneradorSeriales.ObtenerNumeroSerie
(numeroBase: integer; claveUsuario: string): string;
var
i: integer;
begin
result := '';
if (numeroBase <> 0) and (claveUsuario <> '') then
begin
i := numeroBase * Length(claveUsuario) + Ord(claveUsuario[1]) * 156;
result := IntToStr(i);
i := numeroBase * Ord(claveUsuario[1]) * 452;
result := Result + IntToStr(i);
i := numeroBase + (Length(claveUsuario) * Ord(claveUsuario[1])) * 3674;
result := result + IntToStr(i);
result := StringReplace(result, '-', '', [rfReplaceAll]);
end;
end;
function TGeneradorSeriales.ComprobarNumeroSerie(numeroBase: integer;
claveUsuario: string; numeroSerie: string): boolean;
begin
if (numeroBase <> 0) and (claveUsuario <> '') then
result := (numeroSerie = Self.ObtenerNumeroSerie(numeroBase, claveUsuario))
else
result := false;
end;
end.