きっかけ
海外のサービスではほぼ見ないが、日本のサービスではパスワードに文字数制限があったり、特殊文字が使えなかったりするので、ちゃちゃっと生成できるようにしたいと考えていました。
そんなときちょうど Go 言語のスクレイピングライブラリ Colly でサンプルのコードがあったので、自分用に作り変えてみることに。
Go で書いてみる
やりたいことの条件
- ランダムな文字列を返す
- 文字数を指定できる
- 文字のみ、文字+数字のみ、文字+数字+特殊文字 を簡単に選べるようにする
ということで、書いてみる
import "math/rand"
const letters = "abcdefghijklmnopqrstuvwxyz"
const LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
const numbers = "123456789"
const specialChar = "~!@#$%^&*()_-+={}[]:;,.<>?/'"
var letterBytes string
func RandomString(length int, strength int) string {
b := make([]byte, length)
switch strength {
case 3:
letterBytes = letters + LETTERS + numbers + specialChar
case 2:
letterBytes = letters + LETTERS + numbers
default:
letterBytes = letters + LETTERS
}
for i := range b {
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
return string(b)
}