Go的随机数及6位验证码生成

本文介绍了Go语言中用于生成随机数的`math/rand`和`crypto/rand`两个包,重点讨论了如何使用`math/rand`包设置随机种子并生成6位数的验证码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.rand库

随机函数在语言里有两个包,分别是“math/rand”和“crypto/rand”。

“math/rand”的rand包实现了伪随机数生成器。该包里有 exp.go,normal.go,rand.go,rng.go,zipf.go 。

"crypto/rand"的rand包实现了用于加解密的更安全的随机数生成器。该包里有rand.go,rand_linux.go,rand_unix.go,rand_windows.go,util.go。

2.随机数
go的伪随机代码

package main
import (
	"fmt"
	"math/rand"
)
func main() {
	for i := 0; i < 10; i++ {
		fmt.Println(rand.Int())
	}
}


你会发现,不管运行多少次,这十组数据都一样的。那怎么办呢?

想到了设置一个随机种子,种子数字为10好了。如下:

package main
import (
	"fmt"
	"math/rand"
)
func main() {
<pre name="code" class="plain">	rand.New(rand.NewSource(10))
for i := 0; i < 10; i++ {fmt.Println(rand.Int())}}

然后你又会发现跟上面还是一样的,再运行也还是一样的。于是你猜想,跟种子没有关系啊?不是,因为这个时候的rand是默认的。看源码就明白,原来rand.Int()下的随机数都是以1为种子。rand相当于默认的全局。

于是就有了一下代码:

package main
import (
	"fmt"
	"math/rand"
)
func main() {
	rnd := rand.New(rand.NewSource(10))
	for i := 0; i < 10; i++ {
		fmt.Println(rnd.Int())
	}
}

终于不一样了,于是你终于领悟了吧。如果想要每次运行不一样的话,那就改成“活种”。代码如下:
package main
import (
	"fmt"
	"math/rand"
	"time"
)
func main() {
	rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
	for i := 0; i < 10; i++ {
		fmt.Println(rnd.Int())
	}
}

3.六位数验证码

package main
import (
	"fmt"
	"math/rand"
	"time"
)
func main() {
	rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
	vcode := fmt.Sprintf("%06v", rnd.Int31n(1000000))
	fmt.Println(vcode)
}






		rand.NewSource(10)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值