|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 sun19762003 于 2011-11-3 13:03 编辑
function GetSN(School, UserName:string):string;
var
A: array of array of Integer; //声明一个动态二维数组
I, J , K : Integer;
N:integer; //循环总次数
len:integer; //字符串长度
Str,str1,str2 :string;
begin
Str := School + UserName;
if Length(School)< 10 then
begin
MessageBox(0,'用户名长度必须大于10位,中文要有五个字符以上。','出错',MB_OK+MB_ICONERROR);
Exit;
end;
Len:=Length(Str);
N := Len - 10; //循环次数,取最后一次循环的A的值。
SetLength(A,N+1,Len);// 分配二维数组矩阵空间。
//初始化A[0,i]的值。
for i:=0 to Len-1 do A[0,i]:= ord(Str[i+1]);
//以下显示初始化后的结果。
// for i:= 0 to Len-1 do Str1:=Str1+ inttoHex(A[0,i],2)+',';
//Memo1.Lines.Add('初始化:'+ Str1);
//核心算法过程
for i:= 1 to N do //循环N次
begin
for J := 0 to Len-1 do A[I, J] := (A[I-1, J] + A[I-1, J + 1]) mod $FF;
//以下显示每一次循环的结果。
//for k := 0 to Len-1 do Str2:=Str2+inttoHex(A[I,k],2)+',';
//Memo1.Lines.Add(Str2);
Str2:='';
end;
Str2:='';
//获得循环N次后的结果。
for k:= 0 to Len-1 do Str2:=Str2+inttoHex(A[N,k],2);
//取前20位格式化字串:
Result:=Copy(Str2,1,5)+'-'+Copy(Str2,6,5)+'-'+
Copy(Str2,11,5)+'-'+ Copy(Str2,16,5);
end; |
|