Вы говорите о форматировании или создании? Если последнее, то одно из решений, которое я использовал в прошлом, является почтенным:
YYMMDDhhmmssnnn
, где YY..ss
- очевидное, а nnn
- просто число, которое увеличивается каждый раз, когда вы получаете идентификатор транзакции. Таким образом, до тех пор, пока вы не запросите более тысячи идентификаторов в секунду, у вас будет уникальность, и идентификаторы будут действовать только в каждом столетии.
Конечно, если вы действительно хотите немного больше уплотнения, вы можете использовать тот факт, что многие из этих двузначных полей являются пустой тратой. Установите массив символов, способный кодировать некоторые поля в один символ из набора:
abcdefghijklmnopqrstuvwxyz (values 0-25)
ABCDEFGHIJKLMNOPQRSTUVWXYZ ( 26-51)
0123456789 ( 52-61)
(62 символа) и используйте его для кодирования MM, DD, hh, mm и ss в один символ.
Например, апрель, являющийся месяцем 4, может быть закодирован как e
. Через сорок пять минут после часа поле минут будет закодировано как T
.
Это экономит 5 символов, добавьте в CC века, чтобы он не перевернулся еще на 8000 лет или около того, и вы можете обрабатывать миллион идентификаторов в секунду, десять миллионов, если вы кодируете CC
таким же образом, хотя в конечном итоге проблема 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)