Delphi代码如下:
function Tfsoftsn.getcode(name:string):string;
var str,s0,s1:string;
i,j,u,n,k,m:integer;
begin
s0:='V9WXYZAIN5G6QC4LM1RBPEFG23JH7ST8UKBA';
m:=length(trim(name));
s1:='';
k:=0;
for u:=1 to 4 do
begin
for j:=1 to 5 do
begin
for i:=1 to m do
begin
k:=k+ord(name[i])*i*(i+1)*j*(j+3)*(j+5)*u*(u+7)*(u+9)*(u+11);
end;
s1:=s1+copy(s0,(k mod 37),1);
end;
if u<>4 then
s1:=s1+'-';
end;
result:=s1;
end;C#代码如下:string name = "北厦A1中港";
int m = 0;
int k = 0;
string s1 = "";
string s0 = "V9WXYZAIN5G6QC4LM1RBPEFG23JH7ST8UKBA"; m = (name.Trim()).Length;
char[] word = name.ToCharArray(); for (int u = 1; u <= 4; u++)
{
for (int j = 1; j <= 5; j++)
{
for (int i = 1; i <= m; i++)
{ int f = (int)word[i - 1];
int c=i * (i + 1) * j * (j + 3) * (j + 5) * u * (u + 7) * (u + 9) * (u + 11);
k = k + f * c;
} int start = k % 37; //int start = Math.Abs(k % 37);//有时候总取到负值?
s1 = s1 + s0.Substring(start, 1);//负值索引问题!
}
if (u != 4)
{
s1 = s1 + "-";
}
}
return s1;
function Tfsoftsn.getcode(name:string):string;
var str,s0,s1:string;
i,j,u,n,k,m:integer;
begin
s0:='V9WXYZAIN5G6QC4LM1RBPEFG23JH7ST8UKBA';
m:=length(trim(name));
s1:='';
k:=0;
for u:=1 to 4 do
begin
for j:=1 to 5 do
begin
for i:=1 to m do
begin
k:=k+ord(name[i])*i*(i+1)*j*(j+3)*(j+5)*u*(u+7)*(u+9)*(u+11);
end;
s1:=s1+copy(s0,(k mod 37),1);
end;
if u<>4 then
s1:=s1+'-';
end;
result:=s1;
end;C#代码如下:string name = "北厦A1中港";
int m = 0;
int k = 0;
string s1 = "";
string s0 = "V9WXYZAIN5G6QC4LM1RBPEFG23JH7ST8UKBA"; m = (name.Trim()).Length;
char[] word = name.ToCharArray(); for (int u = 1; u <= 4; u++)
{
for (int j = 1; j <= 5; j++)
{
for (int i = 1; i <= m; i++)
{ int f = (int)word[i - 1];
int c=i * (i + 1) * j * (j + 3) * (j + 5) * u * (u + 7) * (u + 9) * (u + 11);
k = k + f * c;
} int start = k % 37; //int start = Math.Abs(k % 37);//有时候总取到负值?
s1 = s1 + s0.Substring(start, 1);//负值索引问题!
}
if (u != 4)
{
s1 = s1 + "-";
}
}
return s1;
Delphi的东西都不记得了
这应该是Delphi和C#在两个32位的数据相乘时,超过int的最大值,然后编译器自动进行转换处理后得到的结果,所以C#会得到负值.因为C#在两个32位的数据相乘时,超过int的最大值,会将得到的64位数据中的高32位数据直接截取掉,只保留低32位数据,而32位数据的最高位是符号位,所以就会有负数出现了.只是不知Delphi在处理超过int的最大值时的默认的处理方式是什么?因为之前没有使用过,你研究下它是怎么转的的,在C#中对应处理就可以了.