123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- package utils
- import (
- "crypto/md5"
- cryptoRand "crypto/rand"
- "encoding/hex"
- "fmt"
- "io"
- "math/big"
- "math/rand"
- "strconv"
- "strings"
- "time"
- "github.com/dchest/captcha"
- )
- func FilterXSS(str string) string {
- str = strings.Replace(str, "<", "<", -1)
- str = strings.Replace(str, ">", ">", -1)
- str = strings.Replace(str, "%3C", "<", -1)
- str = strings.Replace(str, "%3E", ">", -1)
- str = strings.Replace(str, "expression", "expression", -1)
- str = strings.Replace(str, "javascript", "javascript", -1)
- return str
- }
- func MakeSimpleCaptcha(n int) string {
- var idChars = []byte("0123456789")
- b := captcha.RandomDigits(n)
- for i, c := range b {
- b[i] = idChars[c]
- }
- return string(b)
- }
- /**
- 获取当前时间的毫秒值
- */
- func Now4Millis() int64 {
- return time.Now().UnixNano() / 1e6
- }
- /*产生n以内的随机数*/
- func MakeIntRand(n int) int {
- rand.Seed(time.Now().UnixNano())
- return rand.Intn(n)
- }
- //生成32位md5字串
- func GetMd5String(s string) string {
- h := md5.New()
- h.Write([]byte(s))
- return hex.EncodeToString(h.Sum(nil))
- }
- func GenerateSimpleToken() string {
- rand.Seed(time.Now().UnixNano())
- str := fmt.Sprintf("%d%d", time.Now().UnixNano(), rand.Intn(999999))
- h := md5.New()
- h.Write([]byte(str))
- return hex.EncodeToString(h.Sum(nil))
- }
- //var pool = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@#$"
- //获取复杂的随机数
- func GetLetterRandom(length int, flag ...bool) string {
- var idChars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")
- var mod byte = 52
- if len(flag) > 0 && flag[0] {
- idChars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
- mod = 26
- }
- b := make([]byte, length)
- maxrb := byte(256 - (256 % int(mod)))
- i := 0
- EXIT:
- for {
- r := make([]byte, length+(length/4))
- if _, err := io.ReadFull(cryptoRand.Reader, r); err != nil {
- panic("GetLetterRandom: error reading random source: " + err.Error())
- }
- for _, c := range r {
- if c > maxrb {
- continue
- }
- b[i] = c % mod
- i++
- if i == length {
- break EXIT
- }
- }
- }
- for i, c := range b {
- b[i] = idChars[c]
- }
- return string(b)
- }
- /*获取复杂的随机数,数字和字母的组合
- * c > 2 数字的个数和字母的个数随机分配
- * n 数字的个数
- * l 字母的个数
- */
- func GetComplexRandom(c, n, l int) string {
- if c < 2 && (n < 1 || l < 1) {
- return "--"
- }
- r := rand.New(rand.NewSource(time.Now().UnixNano()))
- myCommonMethod := func(flag bool) int {
- if flag {
- return r.Intn(c-1) + 1
- } else {
- return r.Intn(c)
- }
- }
- if c >= 2 {
- n = myCommonMethod(true)
- l = c - n
- } else {
- c = l + n
- }
- value := MakeSimpleCaptcha(n) + GetLetterRandom(l)
- var array = strings.Split(value, "")
- for i := 0; i < c/2; i++ {
- r1 := myCommonMethod(false)
- r2 := myCommonMethod(false)
- o := array[r1]
- array[r1] = array[r2]
- array[r2] = o
- }
- return strings.Join(array, "")
- }
- func GetRandom(n int) string {
- var idChars = []byte("0123456789")
- b := captcha.RandomDigits(n)
- for i, c := range b {
- b[i] = idChars[c]
- }
- return string(b)
- }
- func ObjToString(old interface{}) string {
- if nil == old {
- return ""
- } else {
- r, _ := old.(string)
- return r
- }
- }
- func IntAll(num interface{}) int {
- return IntAllDef(num, 0)
- }
- func IntAllDef(num interface{}, defaultNum int) int {
- if i, ok := num.(int); ok {
- return int(i)
- } else if i0, ok0 := num.(int32); ok0 {
- return int(i0)
- } else if i1, ok1 := num.(float64); ok1 {
- return int(i1)
- } else if i2, ok2 := num.(int64); ok2 {
- return int(i2)
- } else if i3, ok3 := num.(float32); ok3 {
- return int(i3)
- } else if i4, ok4 := num.(string); ok4 {
- in, _ := strconv.Atoi(i4)
- return int(in)
- } else if i5, ok5 := num.(int16); ok5 {
- return int(i5)
- } else if i6, ok6 := num.(int8); ok6 {
- return int(i6)
- } else if i7, ok7 := num.(*big.Int); ok7 {
- in, _ := strconv.Atoi(fmt.Sprint(i7))
- return int(in)
- } else if i8, ok8 := num.(*big.Float); ok8 {
- in, _ := strconv.Atoi(fmt.Sprint(i8))
- return int(in)
- } else {
- return defaultNum
- }
- }
- func ObjArrToMapArr(old []interface{}) []map[string]interface{} {
- if old != nil {
- new := make([]map[string]interface{}, len(old))
- for i, v := range old {
- new[i], _ = v.(map[string]interface{})
- }
- return new
- } else {
- return nil
- }
- }
- /**
- 产生一般订单编号方法
- */
- func CreateOrderCode() string {
- return fmt.Sprint(time.Now().Unix()) + fmt.Sprint(GetRandom(6))
- }
- func GetDayMinMax(t time.Time) (int64, int64) {
- min := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local).Unix()
- return min, min + 86400
- }
|