tools.aw_id
15:041713361fca
Go to Latest
tools.aw_id/src/main.go
+ Новая версия автоматического идентификатора для систем с убогим режимом сортировки (Windows), когда не возможно нормально отсортировать то, что идёт в цифробуквенной кодировке.
1 // devel.a0fs.ru -- aw_id -- v1.r202601.1 //
3 Утилиты генерирования полезных в работе ID
14 "github.com/google/uuid"
15 "github.com/oleg-vasiliev/uuid7"
28 func get_time_id(id_type int) string {
29 cur_time := time.Now()
30 var time_format string = time.RFC3339
34 time_format = "20060102-150405"
36 time_format = "02.01.2006 15:04:05"
38 time_format = "2006-01-02 15:04:05"
40 time_format = "2006-01-02 15-04-05"
42 time_format = "2006-01-02_15-04-05"
44 time_format = "20060102"
46 time_format = "200601"
49 return cur_time.Format(time_format)
52 func get_uuid() string {
57 func get_uuid7() string {
58 res, err := uuid7.New()
61 return "00000000-0000-0000-0000-000000000000"
69 func get_ver_id() string {
70 return fmt.Sprintf("v0.r%s.1", get_time_id(TIME_ID_SHORT2))
73 func get_ver_id2() string {
74 return fmt.Sprintf("0.%s.1", get_time_id(TIME_ID_SHORT2))
77 func str2uint(s string) uint64 {
78 res, err := strconv.ParseUint(s, 10, 64)
80 panic(fmt.Sprintf("Error in parsing '%s': %v\n", s, err))
86 func get_cmprs_ts(c_time time.Time) uint64 {
88 res = str2uint(c_time.Format("02")) << 17
89 res += str2uint(c_time.Format("15")) << 12
90 res += str2uint(c_time.Format("04")) << 6
91 res += str2uint(c_time.Format("05"))
96 func get_ver_auto_tag(is_num bool) string {
98 var auto_version []byte = []byte{
102 var CD [CDB]byte = [CDB]byte{'0', '1', '2', '3', '4', '5', '6',
103 '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
104 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
105 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
106 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
107 't', 'u', 'v', 'w', 'x', 'y', 'z'}
111 buf_time := time.Now()
113 var buf_u64_idx uint64
116 buf_u64 = get_cmprs_ts(buf_time)
117 buf_u64 = buf_u64*uint64(100) + uint64(buf_time.Nanosecond()/10000000)
119 for buf_u64 >= CDB && ar_idx > 0 {
120 buf_u64_idx = buf_u64 % CDB
122 auto_version[ar_idx] = CD[buf_u64_idx]
127 panic(fmt.Sprintf("get_ver_auto_tag: Need more size in buffer, value %v > %v", buf_u64, CDB))
130 auto_version[ar_idx] = CD[buf_u64]
133 return string(auto_version)
136 buf_u64 = get_cmprs_ts(buf_time) << 3
137 buf_u64 += uint64(buf_time.Nanosecond()) >> 27
139 return fmt.Sprintf("%v", buf_u64)
143 func get_ver_id3() string {
144 return fmt.Sprintf("v0.r%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false))
147 func get_ver_id4() string {
148 return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false))
151 func get_ver_id4_n() string {
152 return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(true))
155 func get_ver_id4_s() string {
156 return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false))
159 func get_ver_id4_s_n() string {
160 return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(true))
163 func prnt_out(k, v string) {
164 fmt.Printf("%10s : %s\n", k, v)
167 func make_all_ids() {
168 prnt_out("uuid", get_uuid())
169 prnt_out("uuid7", get_uuid7())
170 prnt_out("ts", get_time_id(TIME_ID))
171 prnt_out("tss", get_time_id(TIME_ID_SHORT))
172 prnt_out("tss2", get_time_id(TIME_ID_SHORT2))
173 prnt_out("hr", get_time_id(TIME_HUM))
174 prnt_out("hrr", get_time_id(TIME_HUM_RU))
175 prnt_out("hrs", get_time_id(TIME_HUM_SAFE))
176 prnt_out("hrs2", get_time_id(TIME_HUM_SAFE2))
177 prnt_out("v", get_ver_id())
178 prnt_out("va", get_ver_id3())
179 prnt_out("vs", get_ver_id2())
180 prnt_out("vsa", get_ver_id4())
181 prnt_out("vsa2", get_ver_id4_n())
182 prnt_out("vssa", get_ver_id4_s())
183 prnt_out("vssa2", get_ver_id4_s_n())
188 if len(os.Args) > 1 {
191 fmt.Println(get_uuid())
193 fmt.Println(get_uuid7())
195 fmt.Println(get_time_id(TIME_ID))
197 fmt.Println(get_time_id(TIME_HUM))
199 fmt.Println(get_time_id(TIME_HUM_RU))
201 fmt.Println(get_time_id(TIME_HUM_SAFE))
203 fmt.Println(get_time_id(TIME_HUM_SAFE2))
205 fmt.Println(get_time_id(TIME_ID_SHORT))
207 fmt.Println(get_time_id(TIME_ID_SHORT2))
209 fmt.Println(get_ver_id())
211 fmt.Println(get_ver_id3())
213 fmt.Println(get_ver_id2())
215 fmt.Println(get_ver_id4())
217 fmt.Println(get_ver_id4_n())
219 fmt.Println(get_ver_id4_s())
221 fmt.Println(get_ver_id4_s_n())
223 fmt.Println("Need one of: ")
224 fmt.Println(" uuid, uuid7, ts, tss, tss2, hr, hrr, hrs, hrs2,")
225 fmt.Println(" v, va, vs, vsa, vsa2, vssa, vssa2")