123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package util
- import (
- MC "app.yhyue.com/moapp/jybase/common"
- "fmt"
- "math/rand"
- "net/http"
- "regexp"
- "sort"
- "strings"
- "time"
- "unicode"
- )
- 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
- }
- // RemoveInvisibleChars 移除控制字符和不可见字符
- func RemoveInvisibleChars(s string) string {
- return strings.Map(func(r rune) rune {
- // 保留普通字符、中文、标点等可见字符
- if unicode.IsGraphic(r) && !unicode.IsControl(r) {
- return r
- }
- return -1
- }, s)
- }
|