main.go 979 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "github.com/dchest/captcha"
  6. "io"
  7. "log"
  8. "os"
  9. )
  10. var (
  11. flagImage = flag.Bool("i", true, "output image captcha")
  12. flagAudio = flag.Bool("a", false, "output audio captcha")
  13. flagLen = flag.Int("len", captcha.StdLength, "length of captcha")
  14. flagImgW = flag.Int("width", captcha.StdWidth, "image captcha width")
  15. flagImgH = flag.Int("height", captcha.StdHeight, "image captcha height")
  16. )
  17. func usage() {
  18. fmt.Fprintf(os.Stderr, "usage: captcha [flags] filename\n")
  19. flag.PrintDefaults()
  20. }
  21. func main() {
  22. flag.Parse()
  23. fname := flag.Arg(0)
  24. if fname == "" {
  25. usage()
  26. os.Exit(1)
  27. }
  28. f, err := os.Create(fname)
  29. if err != nil {
  30. log.Fatalf("%s", err)
  31. }
  32. defer f.Close()
  33. var w io.WriterTo
  34. d := captcha.RandomDigits(*flagLen)
  35. switch {
  36. case *flagAudio:
  37. w = captcha.NewAudio(d)
  38. case *flagImage:
  39. w = captcha.NewImage(d, *flagImgW, *flagImgH)
  40. }
  41. _, err = w.WriteTo(f)
  42. if err != nil {
  43. log.Fatalf("%s", err)
  44. }
  45. fmt.Println(d)
  46. }