2016-09-14 478 views
3

生成6位代碼進行電話驗證, 下面是一個非常簡單的方法,我已經使用用Golang生成6位驗證碼?

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\n", string(pwd))                 
    }  
} 

你有更好的方法來做到這一點?

+0

這個問題將是對的http://codereview.stackexchange.com/ – cartant

+1

可能的複製更合適[如何在golang中生成一個固定長度的隨機字符串?](http://stackoverflow.com/questions/22892120/how-to-generate-a-random-string-of-a-fixed-length-in- golang) – icza

回答

4

您可以使用「加密/ rand「包:它實現了一個密碼安全的僞隨機數生成器。 (試穿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'} 

輸出:

640166 
195174 
221966 

而看How to generate a random string of a fixed length in golang?