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

相关文章

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr