lifedebugger's picture
Deploy files from GitHub repository
48471f7
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
}