123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package dao
- import (
- "strconv"
- "strings"
- "go-common/library/log"
- )
- const (
- _int64Max = 0x7fffffffffffffff
- _uint32Max = 0xffffffff
- )
- // reverseID reverse a digital number represented in string,
- // if len(id) < len, fill 0 on the right of reverse id to make reverse id len 10,
- // if len(id) > len, will return empty string.
- func reverseID(id string, l int) string {
- if len(id) > l {
- log.Error("len(%s) is %d, greater than the given l %d", id, len(id), l)
- return ""
- }
- // reverse id string
- runes := []rune(id)
- for from, to := 0, len(runes)-1; from < to; from, to = from+1, to-1 {
- runes[from], runes[to] = runes[to], runes[from]
- }
- rid := string(runes)
- if len(id) == l {
- return rid
- }
- // fill with 0 on rid's right
- rid += strings.Repeat("0", l-len(id))
- return rid
- }
- func checkIDLen(id string) bool {
- return len(id) <= _maxIDLen
- }
- // diffTs return the last 10 digit of (int64_max - ts).
- func diffTs(ts int64) string {
- i := _int64Max - ts
- s := strconv.FormatInt(i, 10)
- // during ts 0 - (int64 - now), cut the [9,19) part of s as result
- return s[9:19]
- }
- // diffID return the (unsigned_int32_max - id) convert to string in base 10.
- // if len of the string < 10, fill 0 on the left to make len(res) equal to 10.
- func diffID(id int64) string {
- i := _uint32Max - id
- s := strconv.FormatInt(i, 10)
- if len(s) == 10 {
- return s
- }
- return strings.Repeat("0", 10-len(s)) + s
- }
|