iDante is correct, i had issues with it before, so I created this
It does 12 checks, if any of them are different than the first set value of it, it will reset the return value and start the checks over
I probably could have made it with repeat until statement to make it slightly shorter, but it doesn't matter that much.
function MD5(const Str: string): string;
var
 i: byte;
begin
 repeat
  Result := MD5String(Str);
  for i := 0 to 11 do begin
   if (Result <> MD5String(Str)) then begin
    i := 0;
    break;
   end;
  end;
 until (i > 0);
end;
but untested, don't use repeat statement often, could be wrong
actually this may also work with a while (i > 0) sense i starts at 0, but wouldn't in other languages that don't initially set the value of numbers..