Files
shtrihscanner/pkg/shtrih/license.go
SERTY a02209c698 0.1.4-prod
added skip shtrih-searsh - [] in connect.json
fixed license reader
added clearing date-folder after read and before write
2025-08-30 06:08:45 +03:00

96 lines
2.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Файл: pkg/shtrih/license.go
package shtrih
import (
"fmt"
"sort"
"strings"
)
// licenseInfo хранит информацию о квартале и годе для конкретного суффикса лицензии.
type licenseInfo struct {
quarter string
year int
}
// licenseMap сопоставляет суффиксы HEX-лицензий с датой окончания подписки.
// Ключи должны быть в верхнем регистре.
var licenseMap = map[string]licenseInfo{
// 2027
"FFFFFFFF": {"4", 2027},
"FFFFFF7F": {"3", 2027},
"FFFFFF3F": {"2", 2027},
"FFFFFF1F": {"1", 2027},
// 2026
"FFFFFF0F": {"4", 2026},
"FFFFFF07": {"3", 2026},
"FFFFFF03": {"2", 2026},
"FFFFFF01": {"1", 2026},
// 2025
"FFFFFF00": {"4", 2025},
"FFFF7F00": {"3", 2025},
"FFFF3F00": {"2", 2025},
"FFFF1F00": {"1", 2025},
// 2024
"FFFF0F00": {"4", 2024},
"FFFF0700": {"3", 2024},
"FFFF0300": {"2", 2024},
"FFFF0100": {"1", 2024},
// 2023
"FFFF": {"4", 2023},
"FF7F": {"3", 2023},
"FF3F": {"2", 2023},
"FF1F": {"1", 2023},
// 2022
"FF0F": {"4", 2022},
"FF07": {"3", 2022},
"FF03": {"2", 2022},
"FF01": {"1", 2022},
// 2021
"FF00": {"4", 2021},
"7F00": {"3", 2021},
"3F00": {"2", 2021},
"1F00": {"1", 2021},
// 2020
"0F00": {"4", 2020},
"0700": {"3", 2020},
"0300": {"2", 2020},
"0100": {"1", 2020},
}
// sortedLicenseKeys хранит ключи из licenseMap, отсортированные по убыванию длины.
// Это необходимо, чтобы длинные суффиксы ("FFFFFFFF") проверялись раньше коротких ("FFFF").
var sortedLicenseKeys []string
func init() {
keys := make([]string, 0, len(licenseMap))
for k := range licenseMap {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool {
return len(keys[i]) > len(keys[j])
})
sortedLicenseKeys = keys
}
// decodeLicense расшифровывает HEX-строку лицензии в человекочитаемый формат.
// Она ищет наиболее длинное известное вхождение кода лицензии внутри всей строки.
// Если лицензия не распознана, возвращает пустую строку.
func decodeLicense(hex string) string {
if hex == "" {
return ""
}
upperHex := strings.ToUpper(hex)
// Итерируемся по ключам, отсортированным от самого длинного к самому короткому.
for _, licenseCode := range sortedLicenseKeys {
// Проверяем, содержится ли код лицензии ГДЕ-ЛИБО в большой HEX-строке.
if strings.Contains(upperHex, licenseCode) {
info := licenseMap[licenseCode]
return fmt.Sprintf("Подписка до %s квартала %d года", info.quarter, info.year)
}
}
return ""
}