Hola,
Vale Seoane....
Sí; acabo de comprobar que funciona el asunto, y que el número de serie correcto no aparece en la memoria... ¡y esto quiere decir que lo he... que lo habéis conseguido! Toca ahora (para interesados) estudiar el código propuesto y saber porqué funciona y porqué antes no funcionaba...
En todo caso parece que el asunto está arreglado... en otro caso volveré a acosaros de nuevo. Gracias por todo. Si no fuera por vosotros probablemente esto me hubiera costado una úlcera (siempre quise decir algo así).
¡Muchas gracias!
PD. Cuando me asegure de que todo está en orden lo referiré de nuevo aquí, no podré evitarlo. Hasta pronto.
Por cierto... el código quedará más o menos de la siguiente forma:
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 GetNum(var Str: String): Integer;
var
i: integer;
begin
result := 0;
while TryStrToInt(Copy(Str,1,1),i) do
begin
result := (result * 10) + i;
Delete(Str,1,1);
end;
Delete(Str,1,1);
end;
function TGeneradorSeriales.ObtenerNumeroSerie
(numeroBase: integer; claveUsuario: string): string;
var
A: integer;
begin
if (numeroBase <> 0) and (claveUsuario <> '') then
begin
A := numeroBase * Length(claveUsuario) + Ord(claveUsuario[1]) * 666;
result := IntToStr(A) + '-';
A := numeroBase * Ord(claveUsuario[1]) * 123;
result := result + IntToStr(A) + '-';
A := numeroBase + (Length(claveUsuario) * Ord(claveUsuario[1])) * 6613;
result := result + IntToStr(A);
end;
end;
function TGeneradorSeriales.ComprobarNumeroSerie(numeroBase: integer;
claveUsuario: string; numeroSerie: string): boolean;
var
A: integer;
begin
result := false;
if (numeroBase <> 0) and (claveUsuario <> '') then
begin
A := numeroBase * Length(claveUsuario) + Ord(claveUsuario[1]) * 666;
result := GetNum(numeroSerie) = A;
A := numeroBase * Ord(claveUsuario[1]) * 123;
result := result and (GetNum(numeroSerie) = A);
A := numeroBase + (Length(claveUsuario) * Ord(claveUsuario[1])) * 6613;
result := result and (GetNum(numeroSerie) = A);
end;
end;
end.