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...