tools.aw_id
2026-01-02
Parent:74721178aed9
tools.aw_id/src/main.go
+ Новая версия автоматического идентификатора для систем с убогим режимом сортировки (Windows), когда не возможно нормально отсортировать то, что идёт в цифробуквенной кодировке.
1.1 --- a/src/main.go Thu May 29 22:44:09 2025 +0300 1.2 +++ b/src/main.go Fri Jan 02 15:49:00 2026 +0300 1.3 @@ -1,4 +1,4 @@ 1.4 -// devel.a0fs.ru -- aw_id -- v1.r202505.2 // 1.5 +// devel.a0fs.ru -- aw_id -- v1.r202601.1 // 1.6 /* 1.7 Утилиты генерирования полезных в работе ID 1.8 */ 1.9 @@ -74,7 +74,26 @@ 1.10 return fmt.Sprintf("0.%s.1", get_time_id(TIME_ID_SHORT2)) 1.11 } 1.12 1.13 -func get_ver_auto_tag() string { 1.14 +func str2uint(s string) uint64 { 1.15 + res, err := strconv.ParseUint(s, 10, 64) 1.16 + if err != nil { 1.17 + panic(fmt.Sprintf("Error in parsing '%s': %v\n", s, err)) 1.18 + } 1.19 + 1.20 + return res 1.21 +} 1.22 + 1.23 +func get_cmprs_ts(c_time time.Time) uint64 { 1.24 + var res uint64 1.25 + res = str2uint(c_time.Format("02")) << 17 1.26 + res += str2uint(c_time.Format("15")) << 12 1.27 + res += str2uint(c_time.Format("04")) << 6 1.28 + res += str2uint(c_time.Format("05")) 1.29 + 1.30 + return res 1.31 +} 1.32 + 1.33 +func get_ver_auto_tag(is_num bool) string { 1.34 const CDB uint64 = 62 1.35 var auto_version []byte = []byte{ 1.36 '0', '0', '0', 1.37 @@ -87,45 +106,58 @@ 1.38 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 1.39 't', 'u', 'v', 'w', 'x', 'y', 'z'} 1.40 1.41 + var buf_u64 uint64 1.42 + 1.43 buf_time := time.Now() 1.44 - buf_u64, err := strconv.ParseUint(buf_time.Format("02150405"), 10, 64) 1.45 - if err == nil { 1.46 + if !is_num { 1.47 + var buf_u64_idx uint64 1.48 + var ar_idx uint = 5 1.49 + 1.50 + buf_u64 = get_cmprs_ts(buf_time) 1.51 buf_u64 = buf_u64*uint64(100) + uint64(buf_time.Nanosecond()/10000000) 1.52 - if err == nil { 1.53 - var buf_u64_idx uint64 1.54 - var ar_idx uint = 5 1.55 1.56 - for buf_u64 >= CDB && ar_idx > 0 { 1.57 - buf_u64_idx = buf_u64 % CDB 1.58 - buf_u64 /= CDB 1.59 - auto_version[ar_idx] = CD[buf_u64_idx] 1.60 - ar_idx-- 1.61 - } 1.62 + for buf_u64 >= CDB && ar_idx > 0 { 1.63 + buf_u64_idx = buf_u64 % CDB 1.64 + buf_u64 /= CDB 1.65 + auto_version[ar_idx] = CD[buf_u64_idx] 1.66 + ar_idx-- 1.67 + } 1.68 1.69 - if buf_u64 >= CDB { 1.70 - panic(fmt.Sprintf("get_ver_auto_tag: Need more size in buffer, value %v > %v", buf_u64, CDB)) 1.71 + if buf_u64 >= CDB { 1.72 + panic(fmt.Sprintf("get_ver_auto_tag: Need more size in buffer, value %v > %v", buf_u64, CDB)) 1.73 1.74 - } else { 1.75 - auto_version[ar_idx] = CD[buf_u64] 1.76 + } else { 1.77 + auto_version[ar_idx] = CD[buf_u64] 1.78 + } 1.79 1.80 - } 1.81 + return string(auto_version) 1.82 1.83 - } 1.84 + } else { 1.85 + buf_u64 = get_cmprs_ts(buf_time) << 3 1.86 + buf_u64 += uint64(buf_time.Nanosecond()) >> 27 1.87 + 1.88 + return fmt.Sprintf("%v", buf_u64) 1.89 } 1.90 - 1.91 - return string(auto_version) 1.92 } 1.93 1.94 func get_ver_id3() string { 1.95 - return fmt.Sprintf("v0.r%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag()) 1.96 + return fmt.Sprintf("v0.r%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false)) 1.97 } 1.98 1.99 func get_ver_id4() string { 1.100 - return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag()) 1.101 + return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false)) 1.102 +} 1.103 + 1.104 +func get_ver_id4_n() string { 1.105 + return fmt.Sprintf("0.%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(true)) 1.106 } 1.107 1.108 func get_ver_id4_s() string { 1.109 - return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag()) 1.110 + return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(false)) 1.111 +} 1.112 + 1.113 +func get_ver_id4_s_n() string { 1.114 + return fmt.Sprintf("%s.%s", get_time_id(TIME_ID_SHORT2), get_ver_auto_tag(true)) 1.115 } 1.116 1.117 func prnt_out(k, v string) { 1.118 @@ -146,7 +178,9 @@ 1.119 prnt_out("va", get_ver_id3()) 1.120 prnt_out("vs", get_ver_id2()) 1.121 prnt_out("vsa", get_ver_id4()) 1.122 + prnt_out("vsa2", get_ver_id4_n()) 1.123 prnt_out("vssa", get_ver_id4_s()) 1.124 + prnt_out("vssa2", get_ver_id4_s_n()) 1.125 fmt.Println("") 1.126 } 1.127 1.128 @@ -179,12 +213,16 @@ 1.129 fmt.Println(get_ver_id2()) 1.130 case "vsa": 1.131 fmt.Println(get_ver_id4()) 1.132 + case "vsa2": 1.133 + fmt.Println(get_ver_id4_n()) 1.134 case "vssa": 1.135 fmt.Println(get_ver_id4_s()) 1.136 + case "vssa2": 1.137 + fmt.Println(get_ver_id4_s_n()) 1.138 default: 1.139 fmt.Println("Need one of: ") 1.140 fmt.Println(" uuid, uuid7, ts, tss, tss2, hr, hrr, hrs, hrs2,") 1.141 - fmt.Println(" v, va, vs, vsa vssa") 1.142 + fmt.Println(" v, va, vs, vsa, vsa2, vssa, vssa2") 1.143 } 1.144 fmt.Println("") 1.145 } else {