2026-04-27 02:29:42 +08:00

21 lines
653 B
Go

package user
import "fmt"
// NumericDisplayUserIDAllocator 基于 user_id 生成数字短号候选。
// 它只生成格式合法的候选,唯一性仍由 repository 事务保证。
type NumericDisplayUserIDAllocator struct{}
// NextDisplayUserID 返回 6 到 10 位数字短号候选。
func (NumericDisplayUserIDAllocator) NextDisplayUserID(userID int64, attempt int) string {
base := int64(100000)
space := int64(9_999_000_000)
value := base + ((userID + int64(attempt)) % space)
if value < base {
// 负数 user_id 只可能来自测试注入,仍要规整成合法候选。
value = base - value
}
return fmt.Sprintf("%d", value)
}