如何格式化交易ID?

时间:2010-02-25 12:05:47

标签: c# asp.net formatting

格式化交易ID的最佳方法是什么?

条件

  

最多15个字符:XXXXXXXXXXXXXXX

     

- 所有交易必须是唯一的

     

- 包含数字和字母字符

     

- 可以包含年,月,日

1 个答案:

答案 0 :(得分:3)

您是在谈论格式化还是创建它?如果是后者,我过去使用的一个解决方案就是古老的:

YYMMDDhhmmssnnn

其中YY..ss是明显的,nnn只是一个数字,每次获得交易ID时都会递增。这样,只要你不要求每秒超过一千个身份证,你就会拥有自己的独特性,身份证只会在每个世纪都有效。

当然,如果你真的想要更多压缩,你可以使用这些两位数字段中的许多都是浪费的事实。设置一个字符数组,能够将某些字段编码为集合中的单个字符:

abcdefghijklmnopqrstuvwxyz (values  0-25)
ABCDEFGHIJKLMNOPQRSTUVWXYZ (       26-51)
0123456789                 (       52-61)

(62个字符)并用它将MM,DD,hh,mm和ss编码成一个字符。

例如,4月份的第4个月可以编码为e。超过一小时45分钟将分钟字段编码为T

这可以节省5个字符,在CC世纪中加入以阻止它再滚动8000年左右,然后你可以每秒处理一百万个ID,如果你以同样的方式编码CC则可以处理一千万个ID虽然你最终会遇到Y6K问题: - )

所以现在(2010-02-25 / 20:22:15),假设nnnnnn目前是0,你会得到的:

2010 c z u w p 000000
  |  | | | | |    |
  |  | | | | |    +- sequence number within second
  |  | | | | +------ p    =   15 (second)
  |  | | | +-------- w    =   22 (minute)
  |  | | +---------- u    =   20 (hour)
  |  | +------------ z    =   25 (day)
  |  +-------------- c    =    2 (month)
  +----------------- 2010 = 2010 (year)