package links import ( "crypto/rand" "fmt" "math/big" "regexp" ) const codeLength = 5 var ( alphabet = "ABCDEFGHJKMNPQRSTUVWXYZ23456789" alphabetLength = big.NewInt(int64(len(alphabet))) ValidShortCode = regexp.MustCompile(fmt.Sprintf(`^/[%s]{%d}$`, alphabet, codeLength)) ) func randInt() int { p, err := rand.Int(rand.Reader, alphabetLength) if err != nil { panic(err.Error()) } return int(p.Int64()) } func GenCode() string { var code []byte for i := 0; i < codeLength; i++ { code = append(code, alphabet[randInt()]) } return string(code) }