package utils import ( "crypto/rand" "fmt" "math/big" ) // GenerateToken menghasilkan Token 6 digit yang aman secara kriptografi. func GenerateToken() (int64, error) { // Menentukan batas bawah Token, yaitu 100000 (6 digit terkecil) const minToken = 100000 // Menentukan jumlah kemungkinan angka 6 digit, yaitu dari 100000 sampai 999999, // sehingga totalnya 900000 kombinasi const maxRange = 900000 // Mengonversi nilai maxRange ke tipe *big.Int untuk digunakan pada fungsi rand.Int rangeLimit := big.NewInt(int64(maxRange)) // Menghasilkan angka acak secara aman dalam rentang [0, 899999] n, err := rand.Int(rand.Reader, rangeLimit) if err != nil { // Jika gagal menghasilkan angka acak, kembalikan error return 0, fmt.Errorf("gagal menghasilkan Token: %w", err) } // Menambahkan minToken agar angka berada di rentang [100000, 999999] tokenValue := minToken + n.Int64() // Memformat hasil sebagai string 6 digit, menambahkan nol di depan jika perlu return tokenValue, nil }