dongli4711 2016-09-14 02:57
浏览 432
已采纳

使用Golang生成6位数的验证码?

Generate 6-digit code for phone verification, The following is a very simple approach that I have used

package main

import ( 
    "fmt"
    "math/rand"
    "time"
)        

var randowCodes = [...]byte{
    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
}        

func main() {
    var r *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))

    for i := 0; i < 3; i++ {
        var pwd []byte = make([]byte, 6)

        for j := 0; j < 6; j++ {
            index := r.Int() % len(randowCodes)

            pwd[j] = randowCodes[index]
        }

        fmt.Printf("%s
", string(pwd))                                                                  
    }    
} 

Do you have a better way to do this?

  • 写回答

1条回答 默认 最新

  • dsasd12314 2016-09-14 04:28
    关注

    You may use "crypto/rand" package: which implements a cryptographically secure pseudorandom number generator. (try on The Go Playground):

    package main
    
    import (
        "crypto/rand"
        "fmt"
        "io"
    )
    
    func main() {
        for i := 0; i < 3; i++ {
            fmt.Println(EncodeToString(6))
        }
    }
    
    func EncodeToString(max int) string {
        b := make([]byte, max)
        n, err := io.ReadAtLeast(rand.Reader, b, max)
        if n != max {
            panic(err)
        }
        for i := 0; i < len(b); i++ {
            b[i] = table[int(b[i])%len(table)]
        }
        return string(b)
    }
    
    var table = [...]byte{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}
    

    output:

    640166
    195174
    221966
    

    And see: How to generate a random string of a fixed length in golang?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝