You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.0 KiB
132 lines
3.0 KiB
package main |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"log" |
|
"math" |
|
"math/rand" |
|
"strconv" |
|
"strings" |
|
) |
|
|
|
func checkOne(ctx context.Context, result string, value string) bool { |
|
log.Println("checkOne: ", result, value) |
|
if strings.Contains(result, value) { |
|
return true |
|
} |
|
|
|
//var res []entity.GameCdKey |
|
//err := dao.GameCdKey.Ctx(ctx).Where("code=?", value).Scan(&res) |
|
//if err != nil || (res != nil && res[0].Id > -1) { |
|
// return true |
|
//} |
|
|
|
return false |
|
} |
|
|
|
func saveCdKey(ctx context.Context, id int, value string) { |
|
//res, err := dao.GameCdKey.Ctx(ctx).Insert(&do.GameCdKey{Code: value, ConfigId: id}) |
|
//if err != nil { |
|
// log.Printf("saveCdKey value: %s, id: %d, err: %v", value, id, err) |
|
//} else { |
|
// log.Println("saveCdKey res: ", res) |
|
//} |
|
} |
|
|
|
func getPreValue(id int, charset string) string { |
|
charsetLen := len(charset) |
|
preValue := "" |
|
for { |
|
preValue = charset[id%charsetLen:id%charsetLen+1] + preValue |
|
if id/charsetLen == 0 { |
|
break |
|
} |
|
id = id / charsetLen |
|
} |
|
|
|
return preValue |
|
} |
|
func randomGenerate(ctx context.Context, preName string, id, num int, isSave bool) { |
|
charset := "0123456789abcdefghijklmnopqrstuvwxyz" |
|
//lenfrom := 10 |
|
//lento := 10 |
|
//result := "" |
|
//index := -1 |
|
preValue := getPreValue(100900000, charset) |
|
log.Println("randomGenerate: ", preValue, preName, num) |
|
//for i := num - 1; i >= 0; { |
|
// log.Println("randomGenerate: ", index, i) |
|
// if index == i { |
|
// continue |
|
// } |
|
// index = i |
|
// value := generateOne(charset, lenfrom, lento) |
|
// log.Println("generateOne: ", value) |
|
// a := checkOne(ctx, result, value) |
|
// if a == true { |
|
// index = -1 |
|
// continue |
|
// } |
|
// |
|
// i-- |
|
// result += value + "\r" |
|
// if isSave { |
|
// saveCdKey(ctx, id, value) |
|
// } |
|
//} |
|
|
|
//if err := os.WriteFile(fmt.Sprintf("./%s%d.xlsx", preName, id), []byte(result), 0666); err != nil { |
|
// log.Fatal(err) |
|
//} |
|
} |
|
|
|
func main() { |
|
//ctx := gctx.New() |
|
//preName := fmt.Sprintf("code%d_", time.Now().Unix()) |
|
//randomGenerate(ctx, preName, 0, 10, true) |
|
channel := "000000000000" |
|
accountName := "lq00001000000000000" |
|
if !strings.HasPrefix(accountName, channel) { |
|
log.Println("not in ", accountName, channel) |
|
return |
|
} |
|
log.Println("has in ", accountName, channel) |
|
} |
|
|
|
func generateOne(charset string, lenfrom, lento int) string { |
|
result := "" |
|
log.Println("generateOne: ", charset, lenfrom, lento) |
|
if (lenfrom <= lento) && (len(charset) > 0) && (lenfrom >= 0) { |
|
length := math.Round(randomFloat(lenfrom, lento)) |
|
for { |
|
log.Println("generateOne: ", charset, lenfrom, lento) |
|
if float64(len(result)) < length { |
|
Float64Data := math.Floor(rand.Float64() * float64(len(charset))) |
|
Int, _ := strconv.Atoi(fmt.Sprint(Float64Data)) |
|
result += string(getChar(charset, Int)) |
|
} else { |
|
break |
|
} |
|
} |
|
} |
|
|
|
return result |
|
} |
|
|
|
func getChar(str string, index int) rune { |
|
return []rune(str)[index] |
|
} |
|
|
|
// float |
|
func randomFloat(min, max int) float64 { |
|
if max == min { |
|
return float64(max) |
|
} |
|
return decimal(rand.Float64()*(float64(max)-float64(min)) + float64(min)) |
|
} |
|
|
|
func decimal(v float64) float64 { |
|
val, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", v), 64) |
|
return val |
|
}
|
|
|