private String getFileID(String fileid,double seed){
String mixed = getFileIDMixString(seed);
String[] ids= fileid.split("\\*");
StringBuilder realId = new StringBuilder();
int idx;
for (int i=0; i< ids.length; i++){
idx = Integer.parseInt(ids[i]);
realId.append(mixed.charAt(idx));
}
return realId.toString();
}
private String getFileIDMixString(double seed){
StringBuilder mixed = new StringBuilder();
StringBuilder source = new StringBuilder(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");
int index, len = source.length();
for (int i=0; i< len;++i){
seed = (seed * 211 + 30031) % 65536;
index = (int)Math.floor(seed/65536 * source.length());
mixed.append(source.charAt(index));
source.deleteCharAt(index);
}
return mixed.toString();
} javadelphi
String mixed = getFileIDMixString(seed);
String[] ids= fileid.split("\\*");
StringBuilder realId = new StringBuilder();
int idx;
for (int i=0; i< ids.length; i++){
idx = Integer.parseInt(ids[i]);
realId.append(mixed.charAt(idx));
}
return realId.toString();
}
private String getFileIDMixString(double seed){
StringBuilder mixed = new StringBuilder();
StringBuilder source = new StringBuilder(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");
int index, len = source.length();
for (int i=0; i< len;++i){
seed = (seed * 211 + 30031) % 65536;
index = (int)Math.floor(seed/65536 * source.length());
mixed.append(source.charAt(index));
source.deleteCharAt(index);
}
return mixed.toString();
} javadelphi
var
mixed:string;
index,len,i:Integer;
begin
index:=Length(source);
len:=Length(source);
for i := 0 to len do
begin
seed:=(seed * 211 + 30031) mod 65536;
index:=floor(seed/65536 * length(source));
mixed:=mixed+copy(source,index,1);
source:=Delete(source,index,1);
end;
Result:=mixed;
end;
var
source: AnsiString;
i, index, len: Integer;
begin
Result := '';
// 源字串 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890
source := // 一个 \ 在java里是转移符,下面字串的 \\ 可能需要改为 \
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\:._-1234567890';
index := Length(source);
len := index; for i := 0 to len - 1 do
begin
seed := Floor(seed * 211 + 30031) mod 65535;
index := Floor(seed) div 65536 * Length(source);
Result := Result + source[index + 1];
Delete(source, index, 1);
end;end;function getFileID(fileid: AnsiString; seed: Double): AnsiString;
var
mixed: AnsiString;
ids: TStringList;
i, idx: Integer;
begin
Result := '';
mixed := getFileIDMixString(seed);
ids := TStringList.Create;
// string.split("\\*"); 的 \\* 应该是匹配 *字符?
ids.Delimiter := '*'; // 若如此,那么就用 * 来做字符串分隔的符号
ids.Text := fileid; // java string 索引从0开始,delphi 从1开始
for i := 0 to ids.Count - 1 do
begin
if (TryStrToInt(ids[i], idx)) then
Result := Result + mixed[idx + 1];
end;
ids.Free;
end;