2010-02-25 2 views
2

Каков наилучший способ форматирования идентификатора транзакции?как форматировать транзакцию Id?

Условия

Макс 15 символов: XXXXXXXXXXXXXXX

-Все сделка должна быть уникальной

-Может содержат как числовые и буквенные символы

-Может содержат год, месяц , день

+0

Как многие транзакции в год вы ожидаете? – Fionnuala

ответ

3

Вы говорите об форматировании или создании его? Если последнее, одно решения я использовал в прошлом почтенное:

YYMMDDhhmmssnnn 

где YY..ss является очевидным и nnn просто число, которое увеличивает каждый раз, когда вы получаете идентификатор транзакции. Таким образом, до тех пор, пока вы не запрашиваете более тысячи идентификаторов в секунду, вы получите свою уникальность, и идентификаторы будут переворачиваться только каждый век.

Конечно, если вам действительно нужно немного больше уплотнения, вы можете использовать тот факт, что многие из этих двухзначных полей являются отходами. Настройка массива символов в состоянии кодировать некоторые из полей в один characterfrom набор:

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

(62 символов) и использовать его для кодирования MM, DD, чч, мм и сс в один символ.

Например, апрель, месяц 4, может быть кодирован как e. Сорок пять минут после часа будут иметь минутное поле, закодированное как T.

Это спасает 5 символов, добавляет в век CC, чтобы остановить его от перескакивания еще на 8 000 лет или около того, и вы можете обрабатывать миллион ID в секунду, десять миллионов, если вы кодируете CC так же, LL в конечном итоге с проблемой 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) 
+1

Я люблю вашу логику, paxdiablo :) спасибо – 001

Смежные вопросы