tools.aw_id
2026-01-02
Parent:74721178aed9
15:041713361fca tip Browse Files
+ Новая версия автоматического идентификатора для систем с убогим режимом сортировки (Windows), когда не возможно нормально отсортировать то, что идёт в цифробуквенной кодировке.
1.1 --- a/.hgignore Thu May 29 22:44:09 2025 +0300 1.2 +++ b/.hgignore Fri Jan 02 15:49:00 2026 +0300 1.3 @@ -1,4 +1,4 @@ 1.4 syntax: glob 1.5 - 1.6 +.idea/* 1.7 builds/* 1.8
2.1 --- a/src/main.go Thu May 29 22:44:09 2025 +0300 2.2 +++ b/src/main.go Fri Jan 02 15:49:00 2026 +0300 2.3 @@ -1,4 +1,4 @@ 2.4 -// devel.a0fs.ru -- aw_id -- v1.r202505.2 // 2.5 +// devel.a0fs.ru -- aw_id -- v1.r202601.1 // 2.6 /* 2.7 Утилиты генерирования полезных в работе ID 2.8 */ 2.9 @@ -74,7 +74,26 @@ 2.10 return fmt.Sprintf("0.%s.1", get_time_id(TIME_ID_SHORT2)) 2.11 } 2.12 2.13 -func get_ver_auto_tag() string { 2.14 +func str2uint(s string) uint64 { 2.15 + res, err := strconv.ParseUint(s, 10, 64) 2.16 + if err != nil { 2.17 + panic(fmt.Sprintf("Error in parsing '%s': %v\n", s, err)) 2.18 + } 2.19 + 2.20 + return res 2.21 +} 2.22 + 2.23 +func get_cmprs_ts(c_time time.Time) uint64 { 2.24 + var res uint64 2.25 + res = str2uint(c_time.Format("02")) << 17 2.26 + res += str2uint(c_time.Format("15")) << 12 2.27 + res += str2uint(c_time.Format("04")) << 6 2.28 + res += str2uint(c_time.Format("05")) 2.29 + 2.30 + return res 2.31 +} 2.32 + 2.33 +func get_ver_auto_tag(is_num bool) string { 2.34 const CDB uint64 = 62 2.35 var auto_version []byte = []byte{ 2.36 '0', '0', '0', 2.37 @@ -87,45 +106,58 @@ 2.38 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 2.39 't', 'u', 'v', 'w', 'x', 'y', 'z'} 2.40 2.41 + var buf_u64 uint64 2.42 + 2.43 buf_time := time.Now() 2.44 - buf_u64, err := strconv.ParseUint(buf_time.Format("02150405"), 10, 64) 2.45 - if err == nil { 2.46 + if !is_num { 2.47 + var buf_u64_idx uint64 2.48 + var ar_idx uint = 5 2.49 + 2.50 + buf_u64 = get_cmprs_ts(buf_time) 2.51 buf_u64 = buf_u64*uint64(100) + uint64(buf_time.Nanosecond()/10000000) 2.52 - if err == nil { 2.53 - var buf_u64_idx uint64 2.54 - var ar_idx uint = 5 2.55 2.56 - for buf_u64 >= CDB && ar_idx > 0 { 2.57 - buf_u64_idx = buf_u64 % CDB 2.58 - buf_u64 /= CDB 2.59 - auto_version[ar_idx] = CD[buf_u64_idx] 2.60 - ar_idx-- 2.61 - } 2.62 + for buf_u64 >= CDB && ar_idx > 0 { 2.63 + buf_u64_idx = buf_u64 % CDB 2.64 + buf_u64 /= CDB 2.65 + auto_version[ar_idx] = CD[buf_u64_idx] 2.66 + ar_idx-- 2.67 + } 2.68 2.69 - if buf_u64 >= CDB { 2.70 - panic(fmt.Sprintf("get_ver_auto_tag: Need more size in buffer, value %v > %v", buf_u64, CDB)) 2.71 + if buf_u64 >= CDB { 2.72 + panic(fmt.Sprintf("get_ver_auto_tag: Need more size in buffer, value %v > %v", buf_u64, CDB)) 2.73 2.74 - } else { 2.75 - auto_version[ar_idx] = CD[buf_u64] 2.76 + } else { 2.77 + auto_version[ar_idx] = CD[buf_u64] 2.78 + } 2.79 2.80 - } 2.81 + return string(auto_version) 2.82 2.83 - } 2.84 + } else { 2.85 + buf_u64 = get_cmprs_ts(buf_time) << 3 2.86 + buf_u64 += uint64(buf_time.Nanosecond()) >> 27 2.87 + 2.88 + return fmt.Sprintf("%v", buf_u64) 2.89 } 2.90 - 2.91 - return string(auto_version) 2.92 } 2.93 2.94 func get_ver_id3() string { 2.95 - return fmt.Sprintf("v0.r%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag()) 2.96 + return fmt.Sprintf("v0.r%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false)) 2.97 } 2.98 2.99 func get_ver_id4() string { 2.100 - return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag()) 2.101 + return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false)) 2.102 +} 2.103 + 2.104 +func get_ver_id4_n() string { 2.105 + return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(true)) 2.106 } 2.107 2.108 func get_ver_id4_s() string { 2.109 - return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag()) 2.110 + return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false)) 2.111 +} 2.112 + 2.113 +func get_ver_id4_s_n() string { 2.114 + return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(true)) 2.115 } 2.116 2.117 func prnt_out(k, v string) { 2.118 @@ -146,7 +178,9 @@ 2.119 prnt_out("va", get_ver_id3()) 2.120 prnt_out("vs", get_ver_id2()) 2.121 prnt_out("vsa", get_ver_id4()) 2.122 + prnt_out("vsa2", get_ver_id4_n()) 2.123 prnt_out("vssa", get_ver_id4_s()) 2.124 + prnt_out("vssa2", get_ver_id4_s_n()) 2.125 fmt.Println("") 2.126 } 2.127 2.128 @@ -179,12 +213,16 @@ 2.129 fmt.Println(get_ver_id2()) 2.130 case "vsa": 2.131 fmt.Println(get_ver_id4()) 2.132 + case "vsa2": 2.133 + fmt.Println(get_ver_id4_n()) 2.134 case "vssa": 2.135 fmt.Println(get_ver_id4_s()) 2.136 + case "vssa2": 2.137 + fmt.Println(get_ver_id4_s_n()) 2.138 default: 2.139 fmt.Println("Need one of: ") 2.140 fmt.Println(" uuid, uuid7, ts, tss, tss2, hr, hrr, hrs, hrs2,") 2.141 - fmt.Println(" v, va, vs, vsa vssa") 2.142 + fmt.Println(" v, va, vs, vsa, vsa2, vssa, vssa2") 2.143 } 2.144 fmt.Println("") 2.145 } else {