21 lines
653 B
Go
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)
|
|
}
|