Contributor: LARS P. FRIEND           

{
* In a message originally to All, Brad Larned said:
BL >Hello All!

BL >Does anyone have a good registration key routine, they would
BL >be willing to
BL >share, I can download Net-Mail or a response in this message
BL >base will be fine..

Here goes.... }

type regpass:array[1..23] of byte;

function checkregister:boolean;
var
 f:file of regpass;
 p:regpass;
 a,x,y,z,c:word;
begin
 assign(f,'REGISTER.KEY');
 reset(f);
 read(f,p);
 close(f);


 for a:=1 to 20 do
  begin
   z:=z+p[a];
   x:=x XOR p[a];
   y:=y+NOT(p[a]);
   end;
 c:=z;
 z:=z MOD 256;
 x:=x MOD 256;
 y:=y MOD 256;
 checkregister:=false;

 if ((x=p[21]) AND (y=p[22])) AND (z=p[23]) then checkregister:=true;
 if c=0 then checkregister:=false;

end;

This routine allows you to have both somebody's name and a checksum stored. 
If they don't match up, it appears that it isn't a registered copy.  You can 
stash whatever in the first 20 bytes, and the last three are reserved for a 
chacksum.  This is the routine that I use, and it seems to be pretty 
muck-proof;

You can write the routine to create the file and do the checksums yourself.
It's idioticly simple.  C-ya...