@rudolph_senger
Каптча - это технология, которая позволяет отличать компьютерных пользователей от живых пользователей, обычно путем генерации изображений, содержащих текст, который пользователь должен распознать и ввести в форму.
Вот пример того, как можно сделать капчу на Golang, используя стандартную библиотеку и библиотеку для работы с изображениями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
package main import ( "bytes" "fmt" "image" "image/color" "image/png" "math/rand" "net/http" "strconv" "time" ) func main() { http.HandleFunc("/", captchaHandler) http.ListenAndServe(":8080", nil) } func captchaHandler(w http.ResponseWriter, r *http.Request) { // Устанавливаем заголовок ответа для изображения PNG w.Header().Set("Content-Type", "image/png") // Генерируем случайный текст для капчи rand.Seed(time.Now().UnixNano()) captchaText := strconv.Itoa(rand.Intn(9999)) // Создаем изображение для капчи img := image.NewRGBA(image.Rect(0, 0, 200, 100)) for x := 0; x < 200; x++ { for y := 0; y < 100; y++ { img.Set(x, y, color.RGBA{uint8(rand.Intn(255)), uint8(rand.Intn(255)), uint8(rand.Intn(255)), 255}) } } // Рисуем текст на изображении for i, c := range captchaText { img.Set(50+i*30, 50, color.Black) img.Set(50+i*30, 60, color.Black) img.Set(50+i*30, 70, color.Black) img.Set(50+i*30, 80, color.Black) img.Set(51+i*30, 51, color.Black) img.Set(51+i*30, 61, color.Black) img.Set(51+i*30, 71, color.Black) img.Set(51+i*30, 81, color.Black) img.Set(52+i*30, 52, color.Black) img.Set(52+i*30, 62, color.Black) img.Set(52+i*30, 72, color.Black) img.Set(52+i*30, 82, color.Black) img.Set(53+i*30, 53, color.Black) img.Set(53+i*30, 63, color.Black) img.Set(53+i*30, 73, color.Black) img.Set(53+i*30, 83, color.Black) img.Set(54+i*30, 54, color.Black) img.Set(54+i*30, 64, color.Black) img.Set(54+i*30, 74, color.Black) img.Set(54+i*30, 84, color.Black) img.Set(55+i*30, 55, color.Black) img.Set(55+i*30, 65, color.Black) img.Set(55+i*30, 75, color.Black) img.Set(55+i*30, 85, color.Black) dot := 10 + |