转载自:https://blog.csdn.net/tvmerp/article/details/107736457

//验证码生成单元unit AuthenticodeGenerate;interfaceusesSysUtils, Windows, ExtCtrls, Graphics;function GenerateAuthenticode(const Img: TImage; const Len: Integer = 4): string;implementationconstcCharDigitArrayLen = 6;cCharDigitArray      : array[0..cCharDigitArrayLen - 1] of Char = ('3', '4', '5', '6', '7', '8');cCharLowerLetterArrayLen = 13;cCharLowerLetterArray: array[0..cCharLowerLetterArrayLen - 1] of Char = ('b', 'c', 'e', 'h', 'j', 'k', 'm', 'n', 's', 't', 'v', 'w', 'y');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;cFontNameNum = 5;cFontNameArray: array[0..cFontNameNum - 1] of string = ('Arial', 'Tahoma', '宋体', '幼圆', '微软雅黑');{/图像 扭曲变形
function TwistImage(const SrcBmp: TBitmap; XDir: Boolean; MultFactor: Double; Phase: Double; SinTrick: Boolean): TBitmap;
constcTwicePi = 6.283185;
varBaseAxisLen : Double;I, J        : Integer;DestX, DestY: Double;OldX, OldY  : Integer;Color       : TColor;
beginResult := TBitmap.Create;Result.SetSize(SrcBmp.Width, SrcBmp.Height);if XDir thenBaseAxisLen := Result.HeightelseBaseAxisLen := Result.Width;for I := 0 to Result.Width - 1 dobeginfor J := 0 to Result.Height - 1 dobeginif XDir thenDestX := (cTwicePi * J) / BaseAxisLenelseDestX := (cTwicePi * I) / BaseAxisLen;if SinTrick thenbeginDestX := DestX + Phase;DestY := Sin(DestX);end elsebeginDestX := DestX + Phase;DestY := Cos(DestX);end;if XDir thenbeginOldX := I + Round(DestY * MultFactor);OldY := J;end elsebeginOldX := I;OldY := J + Round(DestY * MultFactor);end;Color := SrcBmp.Canvas.Pixels[I, J];if (OldX >= 0) and (OldX < Result.Width) and (OldY >= 0) and (OldY < Result.Height) thenResult.Canvas.Pixels[OldX, OldY] := Color;end;end;
end;}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;elsebeginV := 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;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+4;Y := Random(2) + 4;Img.Canvas.TextOut(X, Y, Result[I + 1]);L := X + Img.Canvas.TextWidth(Result[I + 1]) + Random(2);end;{ /这段代码造成 内存泄漏 的问题if Random(2) = 0 thenbeginif Random(2) = 0 thenImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, True, 8 + Random(3), 1 + Random(2), True)elseImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, False, 8 + Random(3), 1 + Random(2), True);end elsebeginif Random(2) = 0 thenImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, True, 8 + Random(3), 1 + Random(2), False)elseImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, False, 8 + Random(3), 1 + Random(2), False);end;}
{/开始字符串 扭曲变形for I := 0 to Length(Result) - 1 dobeginImg.Canvas.Font.Size := Random(5) + 17;Img.Canvas.Font.Color := RGB(Random(256) and $C0, Random(256) and $C0, Random(256) and $C0);case Random(3) 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 := X + Img.Canvas.TextWidth(Result[I + 1]) + Random(2);end;if Random(2) = 0 thenbeginif Random(2) = 0 thenImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, True, 8 + Random(3), 1 + Random(2), True)elseImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, False, 8 + Random(3), 1 + Random(2), True);end elsebeginif Random(2) = 0 thenImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, True, 8 + Random(3), 1 + Random(2), False)elseImg.Picture.Bitmap := TwistImage(Img.Picture.Bitmap, False, 8 + Random(3), 1 + Random(2), False);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;stm1:TStream;beginimg1 := TImage.Create(self);img1.Width := 120;img1.Height:= 50;///stm1 := TMemoryStream.Create;;///tryUniLabel1.Caption := GenerateAuthenticode(img1,4);///img1.Picture.SaveToStream(stm1);UniImage1.Picture.Bitmap.Assign(img1.Picture.Bitmap);finallyFreeAndNil(img1);end;end;

unigui 验证码生成相关推荐

  1. 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)

    目录 基础理论 一.生成验证码数据集 1.生成验证码训练集 1-0.判断文件夹是否为空 1-1.创建字符集(数字.大小写英文字母) 1-2.随机生成验证码(1000个,长度为4) 2.生成验证码测试集 ...

  2. thinkphp3.2 验证码生成和点击刷新验证码

    一.实例化生成验证码的类(该方法放到IndexController里面便于访问) [php] /**     * 验证码生成  */   public function verify_c(){     ...

  3. web页面 验证码 生成

    web页面 验证码 生成 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kapt ...

  4. tp中php验证码程序,thinkPHP 验证码生成与验证

    您现在的位置是:网站首页>>PHP>>thinkPHP thinkPHP 验证码生成与验证 发布时间:2018-12-06 13:34:11作者:wangjian浏览量:842 ...

  5. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

  6. eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...

  7. java图形验证码生成工具类

    转载自   java图形验证码生成工具类 生成验证码效果       ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...

  8. 菜鸟学Java(六)——简单验证码生成(Java版)

    转载自  菜鸟学Java(六)--简单验证码生成(Java版) 验证码大家都知道,它的作用也不用我多说了吧.如果不太清楚请参见百度百科中的解释,一般验证码的生成就是随机产生字符(数字.字母或者汉字等) ...

  9. python生成验证码_python之验证码生成(gvcode与captcha)

    今天向大家总结一下python在做项目时用到的验证码生成工具:gvcode与captcha gvcode 全称:graphic-verification-code 安装: pip install gv ...

最新文章

  1. react-native 开发小结(Android)
  2. Android 性能优化——绘制优化
  3. a标签传值到另一个页面_vue-router页面传值及接收值
  4. 搞懂静态代码分析,看这文就够了!
  5. java 获得平台编码_关于Java平台的编码
  6. windows上怎么用libnfc的库函数编程
  7. centos运行jar包需要的环境_SpringBoot+Vue前后端一次打包为一个Jar包运行
  8. 史上最全的微信小程序代码大全
  9. 千月影视APP前端搭建_①_注册apicloud账号密码
  10. 图像处理(八)图像插值算法
  11. 对JavaScript中的 事件 进行疯狂 处理
  12. 20.6.5算法心得 一元二次方程解法
  13. TT 的旅行日记 Week7作业B题
  14. CSS里的BFC和IFC的用法
  15. 怎么截取巨大日志里某一天的log
  16. 安卓巴士精选Android开发教程
  17. matlab教程电力电子视频,基于Matlab/Simulink的电力电子仿真演示教学
  18. 如何实现跳转至QQ 或者QQ的加好友页面。
  19. 【多目标进化优化】MOPSO 原理与代码实现
  20. Flutter中文解析乱码问题

热门文章

  1. tcpdf 打印PDF字体乱码,通过视图解决方法
  2. 第一篇——从这里开始
  3. 微信如何批量添加好友?
  4. 股票量化API接口的实例代码分享
  5. 美颜算法原理,推荐一个开源美颜算法工具
  6. linux centos8 安装jdk 卸载jdk
  7. 怎么将MP3转换为m4r格式 如何制作iphone手机铃声
  8. 谷歌浏览器升级后 ,chromedriver过期
  9. 关系代数:集合运算和关系运算部分详解
  10. 【MySQL】MySQL表的CRUD操作(基础)