L
lfpsoft
Unregistered / Unconfirmed
GUEST, unregistred user!
算法如下:
采用64位(8字节)的整数:
(1) 时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,
其中
bit64~bit61:月份的二进制表示;
bit60~bit56:日的二进制表示;
bit55~bit51:小时的二进制表示;
bit50~bit45:分的二进制表示;
bit44~bit39:秒的二进制表示;
(2) 短信网关代码:bit38~bit17,把短信网关的代码转换为整数填写到该字段中。
(3) 序列号:bit16~bit1,顺序增加,步长为1,循环使用。
各部分如不能填满,左补零,右对齐。
function GetInt64(Id:String):int64;
var
atime:int64;
asmc:int64;
aSerial:int64;
begin
aTime:=Strtoint(formatDateTime('mmddhhmmss',now));
aTime:=aTime shl 39;
asmc:=Strtoint(ID);
asmc:=asmc shl 17;
aSerial:=Message_Index;
if Message_Index>=131071 then Message_Index:=0 else Message_Index:=Message_Index+1;
Result:=aTime or asmc or aSerial;
end;
不知道是否正确?
采用64位(8字节)的整数:
(1) 时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,
其中
bit64~bit61:月份的二进制表示;
bit60~bit56:日的二进制表示;
bit55~bit51:小时的二进制表示;
bit50~bit45:分的二进制表示;
bit44~bit39:秒的二进制表示;
(2) 短信网关代码:bit38~bit17,把短信网关的代码转换为整数填写到该字段中。
(3) 序列号:bit16~bit1,顺序增加,步长为1,循环使用。
各部分如不能填满,左补零,右对齐。
function GetInt64(Id:String):int64;
var
atime:int64;
asmc:int64;
aSerial:int64;
begin
aTime:=Strtoint(formatDateTime('mmddhhmmss',now));
aTime:=aTime shl 39;
asmc:=Strtoint(ID);
asmc:=asmc shl 17;
aSerial:=Message_Index;
if Message_Index>=131071 then Message_Index:=0 else Message_Index:=Message_Index+1;
Result:=aTime or asmc or aSerial;
end;
不知道是否正确?