type
TForm1 = class(TForm)
grp1: TGroupBox;
btnReg: TButton;
lbl1: TLabel;
lbl2: TLabel;
usrName: TEdit;
regCode: TEdit;
lbl3: TLabel;
procedure btnRegClick(Sender: TObject);
procedure usrNameKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function HexToInt(S: string): Integer;
begin
Result := StrToInt('$' + IntToStr(StrToInt(S)));
end;
{$R *.dfm}
procedure TForm1.btnRegClick(Sender: TObject);
var
i:Integer;
sum:Integer;
k:Integer;
ByteSum:Integer;
ByteSumAcc:Integer;
begin
ByteSum:=1;
if Length(usrName.Text)<5 then
begin
Application.MessageBox('用户名至少5位数字.', '警告', MB_OK+MB_ICONERROR);
Exit;
end;
for i:=1 to Length(usrName.Text) do
begin
ByteSum:=ByteSum+HexToInt('3'+copy(usrName.Text,i,1));
ByteSumAcc:=ByteSumAcc+ByteSum;
end;
regCode.Text:=IntToHex(ByteSumAcc,4)+inttohex(ByteSum,4);
end;
procedure TForm1.usrNameKeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','.',#8]) then
begin
key:=#0;
Messagebeep(0);
end;
end;
type
TForm1 = class(TForm)
grp1: TGroupBox;
btnReg: TButton;
lbl1: TLabel;
lbl2: TLabel;
usrName: TEdit;
regCode: TEdit;
lbl3: TLabel;
procedure btnRegClick(Sender: TObject);
procedure usrNameKeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
function stringtohex(str:string):string;//字符串转十六进制内码
function hextostring(str:string):string; //十六进制内码转字符串
function hextoint(hex:string):integer;// 十六进制字符转整数
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnRegClick(Sender: TObject);
var
i:Integer;
sum:Integer;
k:Integer;
ByteSum:Integer;
ByteSumAcc:Integer;
start:Integer;
begin
ByteSum:=1;
ByteSumAcc:=0;
start:=1;
if Length(usrName.Text)<5 then
begin
Application.MessageBox('用户名至少5位.', '警告', MB_OK+MB_ICONERROR);
Exit;
end;
for i:=1 to (Length(stringtohex(usrName.Text)) div 2) do
begin
ByteSum:=ByteSum+HexToInt(copy(stringtohex(usrName.Text),start,2));
ByteSumAcc:=ByteSumAcc+ByteSum;
start:=start+2;
end;
regCode.Text:=IntToHex(ByteSumAcc,4)+inttohex(ByteSum,4);
end;
procedure TForm1.usrNameKeyPress(Sender: TObject; var Key: Char);
begin
{if not (key in ['0'..'9','.',#8]) then
begin
key:=#0;
Messagebeep(0);
end; }
end;
function TForm1.stringtohex(str: string): string;
var
i:integer;
s:string;
begin
s:='';
for i:=1 to length(str) do
begin
s:=s+inttohex(Integer(str[i]),2);
end;
result:=s;
end;
function TForm1.hextostring(str: string): string;
var
s,t:string;
i,j:integer;
p:pchar;
begin
s:='';
i:=1;
while i< length(str) do begin
t:=str[i]+str[i+1];
s:=s+chr(hextoint(t));
i:=i+2;
end;
result:=s;
end;
function TForm1.hextoint(hex: string): integer;
Var
i: integer;
Function Ncf(num, f: integer): integer;
Var
i: integer;
Begin
result := 1;
If f = 0 Then exit;
For i := 1 To f Do
result := result * num;
End;
Function HexCharToInt(HexToken: char): Integer;
Begin
If HexToken > #97 Then
HexToken := Chr(Ord(HexToken) - 32);
{ use lowercase aswell }
Result := 0;
If (HexToken > #47) And (HexToken < #58) Then { chars 0....9 }
Result := Ord(HexToken) - 48
Else If (HexToken > #64) And (HexToken < #71) Then { chars A....F }
Result := Ord(HexToken) - 65 + 10;
End;
Begin
result := 0;
hex := ansiuppercase(trim(hex));
If hex = '' Then
exit;
For i := 1 To length(hex) Do
result := result + HexCharToInt(hex[i]) * ncf(16, length(hex) - i);