C#生成图形验证码

写在前面:

嘤嘤嘤 今天有个小姐姐问了我怎么生成验证码?emmm.....之前也有俩个同学问过我啦。我就简单地写篇博文来讲讲我这个比较low的图形验证码是怎么实现的吧。

额 我弄的这个图形验证码是通过伪随机验证码+label控件+背景图来实现的,我觉得我这个图形验证码写得比较low,用代码实现起来也特别简单。

伪随机验证码的生成:

伪随机验证码的生成,其实就是伪随机字符串的生成。这部分我是通过无脑for循环+Random随机选择字符来实现的.......?

先把验证码中包含的所有元素(大小写字母和数字)放入一个string型的字符串list中,然后调用Random()随机生成一个下标,通过这个下标来获取list中对应的字符,for循环length次后,就能得到一个长度为length的伪随机验证码。是不是很简单很low呀??我直接把这段代码写在了项目的静态类Program中,这样的话,所有窗体都可以通过调用静态方法Program.CreateRandomCode(length)来生成一个包含大小写字母和数字的、长度位length的伪随机验证码。

public static string CreateRandomCode(int length)  //生成由数字和大小写字母组成的验证码
{
    string list = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";  
    //list中存放着验证码的元素
    Random random = new Random();
    string code = "";   //验证码
    for (int i = 0; i < length; i++)   //循环6次得到一个伪随机的六位数验证码
    {
        code += list[random.Next(0, list.Length - 1)];
    }
    return code;
}

label控件的设置:

我们可以在窗体中添加一个lable,然后调用CreateRandomCode(length)来进行实例化,代码如下。

lable.Text = CreateRandomCode(4);   //生成一个4位的验证码,并显示在标签lable上。

然而这样的验证码是没有灵魂,我们可以给label设置一个好看点的背景图,让这个low到爆炸的验证码看起来高大上一点。

对lable进行右键选中属性,然后在Image属性这一栏添加一张图片来作为label的背景,这样看起来效果是不是好一点啦?

点击更换验证码的实现: 

要是看不清图形验证码怎么点击更换呢?我们可以在窗体中双击lable对它添加一个Click事件,当鼠标点击label时,调用静态类Program中的静态方法CreateRandomCode(length)来生成一个新的图形验证码,从而实现"看不清,点击更换验证码"的操作。

private void lable_Click(object sender, EventArgs e)
{
    lable.Text = Program.CreateRandomCode(4);
}

当然,我们还可以在label旁边添加一个linklabel(linklabel.Text为"看不清?点击更换"),然后对linklabel添加Click事件即可。LinkBehavior属性我设置成了HoverUnderline,只有当鼠标放在linklabel上才会有下划线。

private void LinkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    lable_Click(sender, e);
}

验证码正误判断:

验证码的判断是忽略字母大小写的,这里我把文本框textBox中输入的内容和验证码都转换成小写字母再进行比对。

if (textBox.Text.ToLower() != lable.Text.ToLower())   //验证码输入错误
{
    MessageBox.Show("您输入的验证码有误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    CheckCode_Click(sender,e);   //刷新一遍验证码
    textBox.Text = "";    //清空验证码输入框
}
else   //验证成功
{
    MessageBox.Show("验证成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢ctrl的cxk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值