uniGUI学习之随机验证码生成及判断

2023-12-16 22:45

本文主要是介绍uniGUI学习之随机验证码生成及判断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果图:

uniGUI学习之随机验证码生成及判断(59)_验证码

 

uses AuthenticodeGenerate, ExtCtrls;
  • 1.

AuthenticodeGenerate.pas

unit AuthenticodeGenerate;interfaceusesSysUtils, Windows, ExtCtrls, Graphics;function GenerateAuthenticode(const Img: TImage;const Len: Integer = 4): string;implementationconst
cCharDigitArrayLen = 10;
cCharDigitArray: array [0 .. cCharDigitArrayLen - 1] of Char = ('0', '1', '2', '3', '4', '5', '6','7', '8', '9');cCharLowerLetterArrayLen = 13;
cCharLowerLetterArray: array [0 .. cCharLowerLetterArrayLen - 1]
of wideChar = ('涂', '一', '二', '三', '赵', '王', '孙', '李', '张', '熊', '五', '拼', '磊'); //也可以添加中文字符cCharUpperLetterArrayLen = 19;cCharUpperLetterArray: array [0 .. cCharUpperLetterArrayLen - 1]of Char = ('A', 'B', 'C', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P','Q', 'R', 'S', 'V', 'W', 'Y');cArrayTypeNum = 3;//上面三种 类型数 也可再添加,添加后,在 // 出随机字符串,里添加4对应处理{ cCLen =8;
cCArray: array [0 .. cCLen - 1] of Char = ('-','-','-','-','-','-','-','-');cArrayTypeNum = 4;}cFontNameNum = 5;cFontNameArray: array [0 .. cFontNameNum - 1] of string = ('Arial', 'Tahoma','宋体', '幼圆', '微软雅黑');procedure NoiseImage(const Img: TImage);
constcNoiseLineNum = 5;cNoisePointNum = 50;
varI: Integer;X: Integer;Y: Integer;
beginfor I := 0 to cNoiseLineNum - 1 dobeginImg.Canvas.Pen.Style := psSolid;case Random(3) of0:Img.Canvas.Pen.Color := clBlack;1:Img.Canvas.Pen.Color := clGray;elseImg.Canvas.Pen.Color := clSilver;end;X := Random(Img.Width);Y := Random(Img.Height);Img.Canvas.MoveTo(X, Y);Img.Canvas.LineTo(X + Random(Img.Width - X), Y + Random(Img.Height - Y));end;for I := 0 to cNoisePointNum - 1 dobegincase Random(3) of0:Img.Canvas.Pixels[Random(Img.Width), Random(Img.Height)] := clBlack;1:Img.Canvas.Pixels[Random(Img.Width), Random(Img.Height)] := clGray;elseImg.Canvas.Pixels[Random(Img.Width), Random(Img.Height)] := clSilver;end;end;
end;function GenerateCharacterAuthenticode(const Img: TImage;const Len: Integer = 4): string;
varI: Integer;V: Char;X: Integer;Y: Integer;L: Integer;str: string;
begin// 出随机字符串Result := '';for I := 0 to Len - 1 dobegincase Random(cArrayTypeNum) of0:beginV := cCharDigitArray[Random(cCharDigitArrayLen)];Result := Result + V;end;1:beginV := cCharLowerLetterArray[Random(cCharLowerLetterArrayLen)];Result := Result + V;end;2:beginV := cCharUpperLetterArray[Random(cCharUpperLetterArrayLen)];Result := Result + V;end;end;end;L := 2 + Random(2);str := Result;Img.Picture := nil;// /开始字符串 扭曲变形for I := 0 to Length(str) - 1 dobeginImg.Canvas.Font.Size := Random(5) + 17;   //17为默认字体大小Img.Canvas.Font.Color := RGB(Random(256) and $C0, Random(256) and $C0,Random(256) and $C0);case Random(2) of0:Img.Canvas.Font.Style := [fsBold];1:Img.Canvas.Font.Style := [fsItalic];end;Img.Canvas.Font.Name := cFontNameArray[Random(cFontNameNum)];X := Random(4) + L;Y := Random(2) + 4;Img.Canvas.TextOut(X, Y, Result[I + 1]);L := 8+ X + Img.Canvas.TextWidth(Result[I + 1]) + Random(2);//8为字符间距end;// 制造背景图噪点NoiseImage(Img);
end;function GenerateAuthenticode(const Img: TImage; const Len: Integer): string;
beginResult := GenerateCharacterAuthenticode(Img, Len);
end;initializationRandomize;
end.
  • .

调用及生成

procedure TMainForm.UniImage1Click(Sender: TObject);
varimg1: TImage;
beginimg1 := TImage.Create(self);tryimg1.Width:=250;//图形验证码的宽度img1.Height:=50;//图形验证码的高度UniLabel1.Caption := GenerateAuthenticode(img1, 6);//6为验证码位数,可以改成4UniImage1.Picture.Bitmap.Assign(img1.Picture.Bitmap);finallyFreeAndNil(img1);end;
end;

验证:

登录后复制 

procedure TMainForm.UniButton2Click(Sender: TObject);
begin
if uniEdit1.Text= UniLabel1.Caption then      showmessage('asdf');
end;

这篇关于uniGUI学习之随机验证码生成及判断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502161

相关文章

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P