package util import ( MC "app.yhyue.com/moapp/jybase/common" "fmt" "math/rand" "net/http" "regexp" "sort" "strings" "time" ) var ( mobileReg = regexp.MustCompile("(?i)(Android|Mobile|Phone)") ) func CheckPlatform(r *http.Request) (p string) { p = "PC" if CheckIsMobile(r) { if CheckWxBrowser(r) { p = "WX" } else { p = "APP" } } return } // 判断是否是微信访问 func CheckWxBrowser(Request *http.Request) bool { if strings.Index(Request.UserAgent(), "MicroMessenger") > -1 || strings.Index(Request.UserAgent(), "Wechat") > -1 { return true } else { return false } } // 是否是移动端 func CheckIsMobile(r *http.Request) bool { client := r.UserAgent() if mobileReg.MatchString(client) { return true } return false } func GetFlag(r *http.Request, w http.ResponseWriter, limitFlag string) (string, bool) { if limitFlag == "" { c, _ := r.Cookie("limitSearchTextFlag") if c != nil { limitFlag = c.Value if limitFlag == "" { sid, _ := r.Cookie("SESSIONID") limitFlag = sid.Value //limitFlag, _ = s.Get("limitSearchTextFlag").(string) } } } if limitFlag != "" { return limitFlag, true } limitFlag = MC.GetLetterRandom(5) + fmt.Sprint(time.Now().UnixNano()) //s.Set("limitSearchTextFlag", limitFlag) c := &http.Cookie{ Name: "limitSearchTextFlag", Value: limitFlag, Path: "/", HttpOnly: false, MaxAge: 2592000, //一个月 } http.SetCookie(w, c) return limitFlag, false } // aData 词库 rData过滤词 count数量 func FilterWord(aData, fData []string, count int) []string { var ( rsData, rData []string ) for _, datum := range aData { var isExist bool for _, datum1 := range fData { if datum == datum1 { isExist = true break } } if !isExist { rsData = append(rsData, datum) } } switch len(rsData) >= count { case true: for _, i2 := range GenerateRandomNumber(0, len(rsData), count) { rData = append(rData, rsData[i2]) } case false: for _, i2 := range GenerateRandomNumber(0, len(aData), count) { rData = append(rData, aData[i2]) } } return rData } // 生成count个[start,end)结束的不重复的随机数 func GenerateRandomNumber(start int, end int, count int) []int { //范围检查 if end < start || (end-start) < count { return nil } //存放结果的slice nums := make([]int, 0) //随机数生成器,加入时间戳保证每次生成的随机数不一样 r := rand.New(rand.NewSource(time.Now().UnixNano())) for len(nums) < count { //生成随机数 num := r.Intn(end-start) + start //查重 exist := false for _, v := range nums { if v == num { exist = true break } } if !exist { nums = append(nums, num) } } sort.Ints(nums) return nums }