tools.aw_id

Yohn Y. 2026-01-02 Parent:74721178aed9

15:041713361fca tip Browse Files

+ Новая версия автоматического идентификатора для систем с убогим режимом сортировки (Windows), когда не возможно нормально отсортировать то, что идёт в цифробуквенной кодировке.

.hgignore src/main.go

     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 {