1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/pojianbing-lazy-captcha

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_V1.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 05:07 33dd584

LazyCaptcha v1 (на основе ImageSharp)

Введение

Продукт, имитирующий EasyCaptcha и SimpleCaptcha, представляет собой модуль графической проверки на основе .Net Standard 2.0. Может работать в среде .Net Framework >= 4.6.1, Core >= 2.0. Для использования в .Net Framework рекомендуется версия 1.1.6 или выше.

С версии 1.1.6 поддерживается .Net Standard 2.0, ранее поддерживался .Net Standard 2.1. Если вы хотите использовать продукт в .Net Framework, используйте версию 1.1.6 или более позднюю.

Адрес документа v2

Слайдер-капча доступна по адресу: lazy-slide-captcha.

Адреса:

Демонстрация эффекта

CaptchaType Шрифт Статическая картинка Динамическая картинка
DEFAULT (0) Actionj Изображения/DEFAULT_N.gif Изображения/DEFAULT_G.gif
CHINESE (1) kaiti Изображения/CHINESE_N.gif Изображения/CHINESE_G.gif
NUMBER (2) Fresnel Изображения/NUMBER_N.gif Изображения/NUMBER_G.gif
NUMBER_ZH_CN (3) kaiti Изображения/NUMBER_ZH_CN.gif Изображения/NUMBER_ZH_CN_G.gif
NUMBER_ZH_HK (4) kaiti Изображения/NUMBER_ZH_HK_N.gif Изображения/NUMBER_ZH_HK_G.gif
WORD (5) Epilog Изображения/WORD_N.gif Изображения/WORD_G.gif
WORD_LOWER (6) Epilog Изображения/WORD_LOWER_N.gif Изображения/WORD_LOWER_G.gif
WORD_UPPER (7) Epilog Изображения/WORD_UPPER_G.gif Изображения/WORD_UPPER_N.gif
WORD_NUMBER_LOWER (8) Epilog Изображения/WORD_NUMBER_LOWER_N.gif Изображения/WORD_NUMBER_LOWER_G.gif
WORD_NUMBER_UPPER (9) Epilog Изображения/WORD_NUMBER_UPPER_N.gif Изображения/WORD_NUMBER_UPPER_G.gif
ARITHMETIC (10) Epilog Изображения/ARITHMETIC_N.gif Изображения/ARITHMETIC_G.gif
ARITHMETIC_ZH (11) kaiti Изображения/ARITHMETIC_ZH_N.gif Изображения/ARITHMETIC_ZH_G.gif

| Шрифт | Картинка | Шрифт | Картинка | | --- | --- | --- | | | Actionj | Изображения/Font_Actionj.gif | Epilog | Изображения/Font_Epilog.gif | | Fresnel | Изображения/Font_Fresnel.gif | Headache | Изображения/Font_Headache.gif | | Kaiti | Изображения/Font_Kaiti.gif | Lexo | Изображения/Font_Lexo.gif | | Prefix | Изображения/Font_Prefix.gif | Progbot | Изображения/Font_Progbot.gif | | Ransom | Изображения/Font_Ransom.gif | Robot | Изображения/Font_Robot.gif | | Scandal | Изображения/Font_Scandal.gif | | |

Онлайн-демонстрация (услуга больше не предоставляется)

# В этот раз возвращается uyfx
http://wosperry.com.cn:8006/captcha?id=999

# Измените параметр на соответствующий ID и графический проверочный код uyfx, и вернёт true после успешной проверки
http://wosperry.com.cn:8006/captcha/validate?id=999&code=uyfx

Установка

Install-Package Lazy.Captcha.Core

* .NET CLI
    * [https://www.nuget.org/packages/Lazy.Captcha.Core](https://www.nuget.org/packages/Lazy.Captcha.Core)
        ```powershell
dotnet add package Lazy.Captcha.Core

Использование

1. Регистрация сервиса

// По умолчанию используется память (AddDistributedMemoryCache)
builder.Services.AddCaptcha(builder.Configuration);

// Если используется redis для распределённого кэширования
//builder.Services.AddStackExchangeRedisCache(options =>
//{
//    options.Configuration = builder.Configuration.GetConnectionString("RedisCache");
//    options.InstanceName = "captcha:";
//});

2. Конфигурация

appsettings.json (если конфигурация не предоставлена, используется конфигурация по умолчанию)
{
  "ConnectionStrings": {
    // При использовании Redis для кэширования необходимо настроить эту опцию
    // Используйте формат, рекомендованный Microsoft.Extensions.Caching.StackExchangeRedis
    "RedisCache":
} **Код на C#:**

``` c#
// 全部配置
builder.Services.AddCaptcha(builder.Configuration, option =>
{
    option.CaptchaType = CaptchaType.WORD; // 验证码类型
    option.CodeLength = 6; // 验证码长度, 要放在CaptchaType设置后.  当类型为算术表达式时,长度代表操作的个数
    option.ExpirySeconds = 30; // 验证码过期时间
    option.IgnoreCase = true; // 比较时是否忽略大小写
    option.StoreageKeyPrefix = ""; // 存储键前缀

    option.ImageOption.Animation = true; // 是否启用动画
    option.ImageOption.FrameDelay = 30; // 每帧延迟,Animation=true时有效, 默认30

    option.ImageOption.Width = 150; // 验证码宽度
    option.ImageOption.Height = 50; // 验证码高度
    option.ImageOption.BackgroundColor = SixLabors.ImageSharp.Color.White; // 验证码背景色

    option.ImageOption.BubbleCount = 2; // 气泡数量
    option.ImageOption.BubbleMinRadius = 5; // 气泡最小半径
    option.ImageOption.BubbleMaxRadius = 15; // 气泡最大半径
    option.ImageOption.BubbleThickness = 1; // 气泡边沿厚度

    option.ImageOption.InterferenceLineCount = 2; // 干扰线数量

    option.ImageOption.FontSize = 36; // 字体大小
    option.ImageOption.FontFamily = DefaultFontFamilys.Instance.Actionj; // 字体

    /* 
     * 中文使用kaiti,其他字符可根据喜好设置(可能部分转字符会出现绘制不出的情况)。
     * 当验证码类型为“ARITHMETIC”时,不要使用“Ransom”字体。(运算符和等号绘制不出来)
     */
});

Контроллер:

[Route("captcha")]
[ApiController]
public class CaptchaController : Controller
{
    private readonly ICaptcha _captcha;

    public CaptchaController(ICaptcha captcha)
    {
        _captcha = captcha;
    }

    [HttpGet]
    public IActionResult Captcha(string id)
    {
        var info = _captcha.Generate(id);
        // 有多处验证码且过期时间不一样,可传第二个参数覆盖默认配置。
        //var info = _captcha.Generate(id,120);
        var stream = new MemoryStream(info.Bytes);
        return File(stream, "image/gif");
    }

    /// <summary>
    /// 演示时使用HttpGet传参方便,这里仅做返回处理
    /// </summary>
    [HttpGet("validate")]
    public bool Validate(string id, string code)
    {
        return _captcha.Validate(id, code);
    }

    /// <summary>
    /// 多次校验(https://gitee.com/pojianbing/lazy-captcha/issues/I4XHGM)
    /// 演示时使用HttpGet传参方便,这里仅做返回处理
    /// </summary>
    [HttpGet("validate2")]
    public bool Validate2(string id, string code)
    {
        return _captcha.Validate(id, code, false);
    }
}
``` **Вот перевод текста на русский язык:**

// Если содержится китайский, используется шрифт kaiti, иначе текст искажается if (options.CaptchaType.ContainsChinese()) { options.ImageOption.FontFamily = DefaultFontFamilys.Instance.Kaiti; options.ImageOption.FontSize = 24; } else { options.ImageOption.FontFamily = DefaultFontFamilys.Instance.Actionj; }

// Динамический и статический случайный выбор options.ImageOption.Animation = random.Next(2) == 0;

// Количество случайных помех options.ImageOption.InterferenceLineCount = random.Next(1, 4);

// Количество пузырей options.ImageOption.BubbleCount = random.Next(1, 4);

// Другие опции... } }


#### 2. Внедрение RandomCaptcha
```csharp
// Память хранится на основе appsettings.json конфигурации
builder.Services.AddCaptcha(builder.Configuration);
// Если включена случайная проверка кода, пожалуйста, откройте следующие комментарии.
// builder.Services.Add(ServiceDescriptor.Scoped<ICaptcha, RandomCaptcha>());
> RandomCaptcha не включён в библиотеку, только для демонстрации, вы можете настроить все значения CaptchaOptions по своему усмотрению.

### Пользовательский шрифт

#### 1. Поиск шрифта
Вы можете найти понравившийся шрифт на [fontspace](https://www.fontspace.com/new/fonts).

#### 2. Поместите шрифт в проект и установите его как встроенный ресурс.
> Конечно, можно не использовать встроенные ресурсы, а поместить их в определённую директорию, просто немного измените ResourceFontFamilysFinder.  

#### 3. Определите класс поиска шрифтов, например, ResourceFontFamilysFinder
```csharp
public class ResourceFontFamilysFinder
{
    private static Lazy<List<FontFamily>> _fontFamilies = new Lazy<List<FontFamily>>(() =>
    {
        var fontFamilies = new List<FontFamily>();
        var assembly = Assembly.GetExecutingAssembly();
        var names = assembly.GetManifestResourceNames();

        if (names?.Length > 0 == true)
        {
            var fontCollection = new FontCollection();
            foreach (var name in names)
            {
                if (!name.EndsWith("ttf")) continue;
                fontFamilies.Add(fontCollection.Add(assembly.GetManifestResourceStream(name)));
            }
        }

        return fontFamilies;
    });


    public static FontFamily Find(string name)
    {
        return _fontFamilies.Value.First(e => e.Name == name);
    }
}

4. Установите опцию

// Память хранится на основе appsettings.json конфигурации
builder.Services.AddCaptcha(builder.Configuration, options =>
{
    // Пользовательский шрифт
    options.ImageOption.FontSize = 28;
    options.ImageOption.FontFamily = ResourceFontFamilysFinder.Find("KG HAPPY"); // Имя шрифта будет отображаться при открытии файла ttf.
});

Использование в .Net Framework

Создайте новый mvc-проект, выбрав .Net Framework версии 4.6.1.

1. Установка через Nuget

Сначала установите SixLabors.ImageSharp.Drawing 1.0.0-beta14

Затем установите Lazy.Captcha.Core 1.1.6

2. Добавление в Global.asax

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        CaptchaConfig();
    }

    private void CaptchaConfig()
    {
        var captchaService = CaptchaServiceBuilder
            .New()
            .Width(98)
            .Height(35)
            .FontSize(20)
            .CaptchaType(CaptchaType.ARITHMETIC)
            .FontFamily(DefaultFontFamilys.Instance.Ransom)
            .InterferenceLineCount(3)
            .Animation(false)
            .Build();
        CaptchaHelper.Initialization(captchaService);
    }
}

3. Использование в Controller

public class CaptchaController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        var id = Guid.NewGuid().ToString().Replace("_", "").Replace("-", "");
        var captchaData = CaptchaHelper.Generate(id);
        var output = new CaptchaResponse
        {
            Id = id,
            Base64 = captchaData.Base64
        };
        return Json(output, JsonRequestBehavior.AllowGet);
        
    }

    /// <summary>
    /// Для демонстрации используется HttpGet для удобства передачи параметров, здесь только обработка возврата
    /// </summary>
    [HttpGet()]
    public bool Validate(string id, string code)
    {
        return CaptchaHelper.Validate(id, code);
    }
}

public class CaptchaResponse
{
    public string Id { get; set; }
    public string Base64 { get; set; }
}
``` **Проект Sample.MvcFramework**

### Версия истории
#### v1.1.6
- добавлена поддержка Framework.

#### v1.1.5
- исправлена ошибка, из-за которой при передаче null в код проверки интерфейса возвращалось значение true.

#### v1.1.4
- оптимизировано отображение мешающих линий, при наличии нескольких линий они соответствующим образом распределяются;
- добавлен параметр конфигурации ForegroundColors для настройки цвета переднего плана;
- проведена оптимизация части кода.

#### v1.1.3
- ImageSharp обновлён до версии 2.1.0.

#### v1.1.2
- улучшен DefaultCaptcha для удобства настройки пользовательских проверочных кодов.

#### v1.1.1
- реализована множественная проверка.

#### v1.1.0
- добавлен параметр FrameDelay для управления задержкой каждого кадра. Параметр действует, когда Animation = true.
- параметр BackgroundColor поддерживает настройку через конфигурационный файл.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/pojianbing-lazy-captcha.git
git@api.gitlife.ru:oschina-mirror/pojianbing-lazy-captcha.git
oschina-mirror
pojianbing-lazy-captcha
pojianbing-lazy-captcha
master