util.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package util
  2. import (
  3. MC "app.yhyue.com/moapp/jybase/common"
  4. "fmt"
  5. "math/rand"
  6. "net/http"
  7. "regexp"
  8. "sort"
  9. "strings"
  10. "time"
  11. )
  12. var (
  13. mobileReg = regexp.MustCompile("(?i)(Android|Mobile|Phone)")
  14. )
  15. func CheckPlatform(r *http.Request) (p string) {
  16. p = "PC"
  17. if CheckIsMobile(r) {
  18. if CheckWxBrowser(r) {
  19. p = "WX"
  20. } else {
  21. p = "APP"
  22. }
  23. }
  24. return
  25. }
  26. // 判断是否是微信访问
  27. func CheckWxBrowser(Request *http.Request) bool {
  28. if strings.Index(Request.UserAgent(), "MicroMessenger") > -1 || strings.Index(Request.UserAgent(), "Wechat") > -1 {
  29. return true
  30. } else {
  31. return false
  32. }
  33. }
  34. // 是否是移动端
  35. func CheckIsMobile(r *http.Request) bool {
  36. client := r.UserAgent()
  37. if mobileReg.MatchString(client) {
  38. return true
  39. }
  40. return false
  41. }
  42. func GetFlag(r *http.Request, w http.ResponseWriter, limitFlag string) (string, bool) {
  43. if limitFlag == "" {
  44. c, _ := r.Cookie("limitSearchTextFlag")
  45. if c != nil {
  46. limitFlag = c.Value
  47. if limitFlag == "" {
  48. sid, _ := r.Cookie("SESSIONID")
  49. limitFlag = sid.Value
  50. //limitFlag, _ = s.Get("limitSearchTextFlag").(string)
  51. }
  52. }
  53. }
  54. if limitFlag != "" {
  55. return limitFlag, true
  56. }
  57. limitFlag = MC.GetLetterRandom(5) + fmt.Sprint(time.Now().UnixNano())
  58. //s.Set("limitSearchTextFlag", limitFlag)
  59. c := &http.Cookie{
  60. Name: "limitSearchTextFlag",
  61. Value: limitFlag,
  62. Path: "/",
  63. HttpOnly: false,
  64. MaxAge: 2592000, //一个月
  65. }
  66. http.SetCookie(w, c)
  67. return limitFlag, false
  68. }
  69. // aData 词库 rData过滤词 count数量
  70. func FilterWord(aData, fData []string, count int) []string {
  71. var (
  72. rsData, rData []string
  73. )
  74. for _, datum := range aData {
  75. var isExist bool
  76. for _, datum1 := range fData {
  77. if datum == datum1 {
  78. isExist = true
  79. break
  80. }
  81. }
  82. if !isExist {
  83. rsData = append(rsData, datum)
  84. }
  85. }
  86. switch len(rsData) >= count {
  87. case true:
  88. for _, i2 := range GenerateRandomNumber(0, len(rsData), count) {
  89. rData = append(rData, rsData[i2])
  90. }
  91. case false:
  92. for _, i2 := range GenerateRandomNumber(0, len(aData), count) {
  93. rData = append(rData, aData[i2])
  94. }
  95. }
  96. return rData
  97. }
  98. // 生成count个[start,end)结束的不重复的随机数
  99. func GenerateRandomNumber(start int, end int, count int) []int {
  100. //范围检查
  101. if end < start || (end-start) < count {
  102. return nil
  103. }
  104. //存放结果的slice
  105. nums := make([]int, 0)
  106. //随机数生成器,加入时间戳保证每次生成的随机数不一样
  107. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  108. for len(nums) < count {
  109. //生成随机数
  110. num := r.Intn(end-start) + start
  111. //查重
  112. exist := false
  113. for _, v := range nums {
  114. if v == num {
  115. exist = true
  116. break
  117. }
  118. }
  119. if !exist {
  120. nums = append(nums, num)
  121. }
  122. }
  123. sort.Ints(nums)
  124. return nums
  125. }