Bueno dec, aquí te dejo una función para comprobar el numero de serie pero sin llegar a generarlo en ningún momento. La función para generarlo sigue siendo la misma que pones en el mensaje #40, y puedes usarla tu para generar los números de serie que le mandes a los clientes.
Código Delphi
[-]
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 CheckSerial(ABase: Integer; AUsername, ASerial: string): Boolean;
var
A: Integer;
begin
Result:= FALSE;
if (ABase <> 0) and (AUserName <> '') then
begin
A:= ABase * Length(AUserName) + Ord(AUserName[1]) * 666;
Result:= GetNum(ASerial) = A;
A := ABase * Ord(AUserName[1]) * 123;
Result:= Result and (GetNum(ASerial)= A);
A := ABase + (Length(AUserName) * Ord(AUserName[1])) * 6613;
Result:= Result and (GetNum(ASerial) = A);
end;
end;
Bueno, ahora ya no aparece el numero de serie en la memoria. Ya solo nos tiene que preocupar que nos parchee el programa algún ruso con mucho tiempo libre

.