|
- package utils
-
- import (
- crand "crypto/rand"
- "fmt"
- "math"
- "math/big"
- "math/rand"
- "time"
- )
-
- func RandString(l int, c ...string) string {
- var (
- chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- str string
- num *big.Int
- )
- if len(c) > 0 {
- chars = c[0]
- }
- chrLen := int64(len(chars))
- for len(str) < l {
- num, _ = crand.Int(crand.Reader, big.NewInt(chrLen))
- str += string(chars[num.Int64()])
- }
- return str
- }
-
- func RandNum() string {
- seed := time.Now().UnixNano() + rand.Int63()
- return fmt.Sprintf("%05v", rand.New(rand.NewSource(seed)).Int31n(1000000))
- }
-
- // x的y次方
- func RandPow(l int) string {
- var i = "1"
- for j := 0; j < l; j++ {
- i += "0"
- }
- k := StrToInt64(i)
- n := rand.New(rand.NewSource(time.Now().UnixNano())).Int63n(k)
- ls := "%0" + IntToStr(l) + "v"
- str := fmt.Sprintf(ls, n)
- //min := int(math.Pow10(l - 1))
- //max := int(math.Pow10(l) - 1)
- return str
- }
- func RandInt(min, max int) int {
- if min >= max || min == 0 || max == 0 {
- if max == 0 {
- max = min
- }
- return max
- }
- return rand.Intn(max-min) + min
- }
- func RandInt1(min, max int) int {
- rand.Seed(time.Now().UnixNano())
- return rand.Intn(max-min+1) + min
- }
-
- func CalculateDistance(lat1, lng1, lat2, lng2 float64) float64 {
- radius := 6371.0 // 地球半径(单位:公里)
- dLat := DegToRad(lat2 - lat1)
- dLng := DegToRad(lng2 - lng1)
- a := math.Sin(dLat/2)*math.Sin(dLat/2) + math.Cos(DegToRad(lat1))*math.Cos(DegToRad(lat2))*math.Sin(dLng/2)*math.Sin(dLng/2)
- c := 2 * math.Atan2(math.Sqrt(a), math.Sqrt(1-a))
- distance := radius * c
-
- return distance
- }
-
- // 将角度转换为弧度
- func DegToRad(deg float64) float64 {
- return deg * (math.Pi / 180)
-
- }
|