renjiaojiao 3 недель назад
Родитель
Сommit
e6890654d3
1 измененных файлов с 10 добавлено и 29 удалено
  1. 10 29
      service/material.go

+ 10 - 29
service/material.go

@@ -5,11 +5,11 @@ import (
 	entity "bp.jydev.jianyu360.cn/BaseService/biService/entity"
 	"bp.jydev.jianyu360.cn/BaseService/biService/rpc/pb"
 	"crypto/rand"
-	"encoding/binary"
 	"errors"
 	"fmt"
 	"github.com/gogf/gf/v2/util/gconv"
 	"log"
+	"math/big"
 	"net/url"
 	"strings"
 	"time"
@@ -92,7 +92,7 @@ func PersonImgSaveComposite(fileUrl, qrcodeUrl, name string) ([]byte, error) {
 		code = gconv.String((*data)["code"])
 	} else {
 		//没有code,生成一个
-		code = GenerateUniqueRandomString(6)
+		code = generateRandomString(6)
 		entity.JyBiTidb.Insert("dwd_d_userbase_belongto_rulecode", map[string]interface{}{
 			"code":     code,
 			"pcode":    "04",
@@ -120,34 +120,15 @@ func PersonImgSaveComposite(fileUrl, qrcodeUrl, name string) ([]byte, error) {
 	return imgByte, err
 }
 
-func GenerateUniqueRandomString(length int) string {
-	// 获取当前时间(纳秒级)
-	now := time.Now().UnixNano()
-
-	// 生成随机数
-	var randNum uint64
-	if err := binary.Read(rand.Reader, binary.BigEndian, &randNum); err != nil {
-		randNum = uint64(now)
+func generateRandomString(length int) string {
+	const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+	b := make([]byte, length)
+	for i := range b {
+		// 安全地生成随机索引 (0 到 len(charset)-1)
+		idx, _ := rand.Int(rand.Reader, big.NewInt(int64(len(charset))))
+		b[i] = charset[idx.Int64()]
 	}
-
-	// 组合时间和随机数
-	uniqueValue := now ^ int64(randNum)
-
-	// 转换为base36字符串(0-9a-z)
-	charset := "0123456789abcdefghijklmnopqrstuvwxyz"
-	result := make([]byte, length)
-	for i := range result {
-		// 使用模运算选择字符
-		result[i] = charset[uniqueValue%36]
-		uniqueValue /= 36
-
-		// 如果值耗尽,重新生成
-		if uniqueValue == 0 {
-			uniqueValue = time.Now().UnixNano()
-		}
-	}
-
-	return string(result)
+	return string(b)
 }
 
 func hasAnyParameters(rawURL string) (bool, error) {