点击下载 Captcha.zip

/// <summary>
/// 类说明:条码生成类
/// 编 码 人:苏飞
/// 联系方式:361983679
/// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http://www.sufeinet.com/thread-655-1-1.html[/url]
/// </summary>
using System;
using System.Drawing; public static class Captcha
{
private static double[] addVector(double[] a, double[] b)
{
return new double[] { a[] + b[], a[] + b[], a[] + b[] };
} private static double[] scalarProduct(double[] vector, double scalar)
{
return new double[] { vector[] * scalar, vector[] * scalar, vector[] * scalar };
} private static double dotProduct(double[] a, double[] b)
{
return a[] * b[] + a[] * b[] + a[] * b[];
} private static double norm(double[] vector)
{
return Math.Sqrt(dotProduct(vector, vector));
} private static double[] normalize(double[] vector)
{
return scalarProduct(vector, 1.0 / norm(vector));
} private static double[] crossProduct(double[] a, double[] b)
{
return new double[]
{
(a[] * b[] - a[] * b[]),
(a[] * b[] - a[] * b[]),
(a[] * b[] - a[] * b[])
};
} private static double[] vectorProductIndexed(double[] v, double[] m, int i)
{
return new double[]
{
v[i + ] * m[] + v[i + ] * m[] + v[i + ] * m[] + v[i + ] * m[],
v[i + ] * m[] + v[i + ] * m[] + v[i + ] * m[] + v[i + ] * m[],
v[i + ] * m[] + v[i + ] * m[] + v[i + ] * m[]+ v[i + ] * m[],
v[i + ] * m[] + v[i + ] * m[] + v[i + ] * m[]+ v[i + ] * m[]
};
} private static double[] vectorProduct(double[] v, double[] m)
{
return vectorProductIndexed(v, m, );
} private static double[] matrixProduct(double[] a, double[] b)
{
double[] o1 = vectorProductIndexed(a, b, );
double[] o2 = vectorProductIndexed(a, b, );
double[] o3 = vectorProductIndexed(a, b, );
double[] o4 = vectorProductIndexed(a, b, ); return new double[]
{
o1[], o1[], o1[], o1[],
o2[], o2[], o2[], o2[],
o3[], o3[], o3[], o3[],
o4[], o4[], o4[], o4[]
};
} private static double[] cameraTransform(double[] C, double[] A)
{
double[] w = normalize(addVector(C, scalarProduct(A, -)));
double[] y = new double[] { , , };
double[] u = normalize(crossProduct(y, w));
double[] v = crossProduct(w, u);
double[] t = scalarProduct(C, -); return new double[]
{
u[], v[], w[], ,
u[], v[], w[], ,
u[], v[], w[], ,
dotProduct(u, t), dotProduct(v, t), dotProduct(w, t),
};
} private static double[] viewingTransform(double fov, double n, double f)
{
fov *= (Math.PI / );
double cot = 1.0 / Math.Tan(fov / );
return new double[] { cot, , , , , cot, , , , , (f + n) / (f - n), -, , , * f * n / (f - n), };
} public static Image Generate(string captchaText)
{
int fontsize = ;
Font font = new Font("Arial", fontsize); SizeF sizeF;
using (Graphics g = Graphics.FromImage(new Bitmap(, )))
{
sizeF = g.MeasureString(captchaText, font, , StringFormat.GenericDefault);
} int image2d_x = (int)sizeF.Width;
int image2d_y = (int)(fontsize * 1.3); Bitmap image2d = new Bitmap(image2d_x, image2d_y);
Color black = Color.Black;
Color white = Color.White; using (Graphics g = Graphics.FromImage(image2d))
{
g.Clear(black);
g.DrawString(captchaText, font, Brushes.White, , );
} Random rnd = new Random();
double[] T = cameraTransform(new double[] { rnd.Next(-, ), -, rnd.Next(, ) }, new double[] { , , });
T = matrixProduct(T, viewingTransform(, , )); double[][] coord = new double[image2d_x * image2d_y][]; int count = ;
for (int y = ; y < image2d_y; y += )
{
for (int x = ; x < image2d_x; x++)
{
int xc = x - image2d_x / ;
int zc = y - image2d_y / ;
double yc = -(double)(image2d.GetPixel(x, y).ToArgb() & 0xff) / * ;
double[] xyz = new double[] { xc, yc, zc, };
xyz = vectorProduct(xyz, T);
coord[count] = xyz;
count++;
}
} int image3d_x = ;
int image3d_y = image3d_x * / ;
Bitmap image3d = new Bitmap(image3d_x, image3d_y);
Color fgcolor = Color.White;
Color bgcolor = Color.Black;
using (Graphics g = Graphics.FromImage(image3d))
{
g.Clear(bgcolor);
count = ;
double scale = 1.75 - (double)image2d_x / ;
for (int y = ; y < image2d_y; y += )
{
for (int x = ; x < image2d_x; x++)
{
if (x > )
{
double x0 = coord[count - ][] * scale + image3d_x / ;
double y0 = coord[count - ][] * scale + image3d_y / ;
double x1 = coord[count][] * scale + image3d_x / ;
double y1 = coord[count][] * scale + image3d_y / ;
g.DrawLine(new Pen(fgcolor), (float)x0, (float)y0, (float)x1, (float)y1);
}
count++;
}
}
}
return image3d;
}
}

[验证码实现] Captcha 验证码类,一个很个性的验证码类 (转载)的更多相关文章

  1. Confluence 6 配置验证码(Captcha)来防止垃圾

    如果你的 Confluence 站点是对公众开放的(允许匿名用户使用,添加评论,创建页面等),你可能会发现你的站点会被自动创建很多垃圾页面,评论或者其他垃圾内容. 你可以配置让 Confluence ...

  2. 一个漂亮的php验证码类

    一个漂亮的php验证码类(分享)   作者: 字体:[增加 减小] 类型:转载 下面小编就为大家分享一个漂亮的php验证码类.需要的朋友可以过来参考下   直接上代码: 复制代码 代码如下: //验证 ...

  3. Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考

    在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...

  4. DVWA-全等级验证码Insecure CAPTCHA

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  5. 用Java制作一个简单的图片验证码

    //Java实现简单验证码功能 package project; import java.awt.Color; import java.awt.Font;import java.awt.Graphic ...

  6. PHP入门培训教程 一个漂亮的PHP验证码

    如何写一个漂亮的PHP验证码?兄弟连PHP培训 小编分享一段代码给大家: <?php class Imagecode{ private $width ; private $height; pri ...

  7. 接口 ThreadMXBean 一个很好用的线程管理接口类 可以参考 jdk 帮助文档

    概述  软件包   类  使用  树  已过时  索引  帮助  JavaTM Platform Standard Ed. 6  上一个类   下一个类 框架    无框架    所有类 摘要: 嵌套 ...

  8. Makefile经典教程(一个很棒很清晰的讲解)【转】

    转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...

  9. 【Android】java生成炫酷验证码,不区分大小写。登陆,发送手机验证码,防止注册机,android开发

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下 ...

随机推荐

  1. [LeetCode#157] Read N Characters Given Read4

    Problem: The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is ...

  2. bzoj2004

    反正N<=10^9肯定是矩阵乘法反正p<=10肯定是状压dp首先有一个非常重要的性质是任意连续P个站,必须保证K辆车必须停在其中的一个站我们设f[i,S]表示到第i个站搞定了后,这K辆公交 ...

  3. STM32F0308开发环境的选择--CooCox CoIDE篇

    STM32的开发环境有很多总,官方手册也提供了IAR Embedded Workbench.MDK-ARM和TrueSTUDIO这3种.今天我试用了CooCox CoIDE,是免费的集成开发环境,同T ...

  4. (转载)1248 - Every derived table must have its own alias

    (转载)http://hi.baidu.com/lylegend13/item/a79f17eb51f5dff7e0a5d43b 1. select count(distinct CName) fro ...

  5. (转载)MySql按日期进行统计(前一天、本周、某一天)

    (转载)http://www.yovisun.com/mysql-date-statistics.html 在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_t ...

  6. (转载)C++中, 构造函数和析构函数能不能被显示调用?

    (转载)http://blog.csdn.net/zhangxinrun/article/details/6056321 代码: view plaincopy to clipboardprint?#i ...

  7. linux之cut用法

    转载:http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html cut是一个选取命令,就是将一段数据经过分析,取出我们想要的. ...

  8. Bzoj 4034: [HAOI2015]T2 树链剖分,子树问题,dfs序

    4034: [HAOI2015]T2 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1841  Solved: 598[Submit][Status] ...

  9. 天涯html&css基础框架

    html申明 对ie6-8在html中添加no-css3这个class和各个版本的class,对ie7以下添加lte7这个class,然后根据我们目前使用浏览器的比例,把第一的ie6放在判断第一位. ...

  10. 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0

    MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...