根据某些字段生成唯一的长值

时间:2019-01-23 14:21:19

标签: c# .net

我有这样的交易类:

Public class Transaction
{
    public long Id { get; set; }

    public int DId { get; set; }
    public int BId { get; set; }
    public int DocId { get; set; }
    public int OpId { get; set; }

    public string Description { get; set; }
    public DateTime RegDate { get; set; }
}

我希望根据DId,BId,DocId和OpId生成唯一的 long 值。 当我们将所有这些字段组合在一起时,我得到了 Decimal 值! 现在如何根据以上字段获得唯一的 long 值?

1 个答案:

答案 0 :(得分:0)

根据您添加的评论:

  

long.Parse(string.Concat(DId, BId, DocId, OpId))   DId的长度= 8 BId的长度= 5 DocId的长度= 7 OpId的长度= 4

并假设您所说的意思:

length of DId = 8    Value = 0 to 99,999,999 (up to 27 bits)
length of BId = 5    Value = 0 to 99,999     (up to 17 bits)
length of DocId = 7  Value = 0 to 9,999,999  (up to 24 bits)
length of OpId = 4   Value = 0 to 9,999      (up to 14 bits)

总共需要82位,以确保可以从四个源值中生成唯一值。

太长了,无法存储在最大存储容量为64位的long中。

但是,如果您的意思是每个值的与您指示的相同:

length of DId = 8 BITS    Value = 0 to 255
length of BId = 5 BITS    Value = 0 to 31
length of DocId = 7 BITS  Value = 0 to 127
length of OpId = 4 BITS   Value = 0 to 15

然后,只要总大小只有24位,就可以存储它。

您可以通过位移来实现:

long Id = (long)((DId << 16) + (BId << 11) + (DocId << 4) + OpId);