tools.aw_id

Yohn Y. 2025-04-10 Parent:3a967e85c0ca Child:5ba13dd7ef05

12:223ba01da43a Go to Latest

tools.aw_id/src/main.go

* Новые автоматические версии выпускается в форме, пригодном для сортировки

History
     1.1 --- a/src/main.go	Wed Apr 09 20:20:05 2025 +0300
     1.2 +++ b/src/main.go	Thu Apr 10 13:10:33 2025 +0300
     1.3 @@ -1,4 +1,4 @@
     1.4 -// devel.a0fs.ru -- aw_id -- v1.r202504.1 //
     1.5 +// devel.a0fs.ru -- aw_id -- v1.r202504.2 //
     1.6  /*
     1.7    Утилиты генерирования полезных в работе ID
     1.8  */
     1.9 @@ -9,8 +9,6 @@
    1.10  	"os"
    1.11  	"time"
    1.12  
    1.13 -	"encoding/base64"
    1.14 -	"encoding/binary"
    1.15  	"strconv"
    1.16  
    1.17  	"github.com/google/uuid"
    1.18 @@ -64,21 +62,45 @@
    1.19  }
    1.20  
    1.21  func get_ver_auto_tag() string {
    1.22 -	var auto_version string = "AAAAAA"
    1.23 +	const CDB uint64 = 62
    1.24 +	var auto_version []byte = []byte{
    1.25 +		'0', '0', '0',
    1.26 +		'0', '0', '0'}
    1.27  
    1.28 -	buf := make([]byte, 8)
    1.29 +	var CD [CDB]byte = [CDB]byte{'0', '1', '2', '3', '4', '5', '6',
    1.30 +		'7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
    1.31 +		'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
    1.32 +		'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
    1.33 +		'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
    1.34 +		't', 'u', 'v', 'w', 'x', 'y', 'z'}
    1.35 +
    1.36  	buf_time := time.Now()
    1.37  	buf_u64, err := strconv.ParseUint(buf_time.Format("02150405"), 10, 64)
    1.38  	if err == nil {
    1.39  		buf_u64 = buf_u64*uint64(100) + uint64(buf_time.Nanosecond()/10000000)
    1.40 -		_, err = binary.Encode(buf, binary.BigEndian, buf_u64)
    1.41  		if err == nil {
    1.42 -			auto_version = base64.RawURLEncoding.EncodeToString(buf[4:])
    1.43 +			var buf_u64_idx uint64
    1.44 +			var ar_idx uint = 5
    1.45 +
    1.46 +			for buf_u64 >= CDB && ar_idx > 0 {
    1.47 +				buf_u64_idx = buf_u64 % CDB
    1.48 +				buf_u64 /= CDB
    1.49 +				auto_version[ar_idx] = CD[buf_u64_idx]
    1.50 +				ar_idx--
    1.51 +			}
    1.52 +
    1.53 +			if buf_u64 >= CDB {
    1.54 +				panic(fmt.Sprintf("get_ver_auto_tag: Need more size in buffer, value %v > %v", buf_u64, CDB))
    1.55 +
    1.56 +			} else {
    1.57 +				auto_version[ar_idx] = CD[buf_u64]
    1.58 +
    1.59 +			}
    1.60  
    1.61  		}
    1.62  	}
    1.63  
    1.64 -	return auto_version
    1.65 +	return string(auto_version)
    1.66  }
    1.67  
    1.68  func get_ver_id3() string {