当前位置:首页 » 操作系统 » c验证码源码

c验证码源码

发布时间: 2023-01-21 04:56:08

Ⅰ 用c语言编写验证码

个人觉得,提问者的难点应该是在随机生成4个汉字,至于验证什么的应该不是问题。
4个汉字其实就是8个字节,主要是得搞清楚汉字是扩展ascii嘛的取值范围,然后用随机函数生成这个范围的值就OK了。

Ⅱ 急求!1急求!!用c语言实现类似网页验证码的算法。拜托啦!!!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

intisright()
{
inti,input,letter,flag=0;
intt[4],num,upper,lower;
chara,b,c,d;

//随机数产生
srand((unsigned)time(NULL));
for(i=0;i<4;i++)
{
input=rand()%3;//验证码可能为:数字、大写字母、小写字母
if(input==0){num=rand()%10+48;printf("%c",num);t[i]=num;}//数字
letter=rand()%26;
if(input==1)//大写字母
{upper=letter+65;printf("%c",upper);t[i]=upper;}
if(input==2)//小写字母
{lower=letter+97;printf("%c",lower);t[i]=lower;}

}
printf(" ");
//for(i=0;i<4;i++)
//printf("%c",t[i]);
scanf("%c%c%c%c",&a,&b,&c,&d);//输入验证码
if(a==t[0]&&b==t[1]&&c==t[2]&&d==t[3])
printf("验证码正确 ");//验证码匹配
else{printf("验证码错误 ");flag=1;}
returnflag;//错误则返回1,正确返回0
}

main()
{
intsum=0,i,error;
for(i=0;;i++)
{
error=isright();
sum=sum+error;//统计错误次数
if(sum==3){printf("输入次数达上限! ");break;}//错误3次,程序结束
}

}

Ⅲ 怎样实现输入验证码呢要用C语言的

#include <stdio.h>
#include <string.h>
main()
{
char a[15],i=3;
do{
printf("Password:");
gets(a);
if(strcmp(a,"hello")==0) break;//这里请连到你的密码文件或者是连接到数据库验证,这里是 hello
}while(--i);
if(i==0) printf("Input errer 3 num.System close!\n");
else
{
//这里写入你密码正确要执行的代码
}
}

Ⅳ c# Winform 实现登录界面验证码功能(文末附源码

闲来无事,最近自己发现自己的验证码功能还没有写过。于是就写下了这篇文章。

界面就比较丑了,一个picturebox,一个textbox,一个button按钮主要想的是先把功能实现了,万一以后业务上需要使用呢。

实现以后的功能图

在文本框中输入对应文字,点击确定来验证,正确时候如图所示

如果验证失败,没有提示,直接更新验证码,当然需要使用的时候根据业务逻辑来就是了,这个就比较简单了。

第一:生成验证码字符串,用到的是Random随机函数

第二:将该字符串画在picturebox中

第三点击图片,刷新验证码

第四验证验证码不区分大小写

或者区分大小写

此时完成

源码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace suijima

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        //验证码的长度

        private const int iVerifyCodeLength = 6;

        //验证码

        private String strVerifyCode = "";

        //匹配字符的临时变量

        string strTemp = "";

        private void btnUpdate_Click(object sender, EventArgs e)

        {

            UpdateVerifyCode();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            UpdateVerifyCode();

        }

        //更新验证码

        private void UpdateVerifyCode()

        {

            strVerifyCode = CreateRandomCode(iVerifyCodeLength);

            if(strVerifyCode=="")

            {

                return;

            }

            strTemp = strVerifyCode;

            CreateImage(strVerifyCode);

        }

        //生成验证码字符串

        private string CreateRandomCode(int iLength)

        {

            int rand;

            char code;

            string randomCode = String.Empty;

            //生成一定长度的验证码

            System.Random random = new Random();

            for (int i = 0; i < iLength; i++)

            {

                rand = random.Next();

                if (rand % 3 == 0)

                {

                    code = (char)('A' + (char)(rand % 26));

                }

                else

                {

                    code = (char)('0' + (char)(rand % 10));

                }

                randomCode += code.ToString();

            }

            return randomCode;

        }

        ///  创建验证码图片

        private void CreateImage(string strVerifyCode)

        {

            try

            {

                int iRandAngle = 45;    //随机转动角度

                int iMapWidth = (int)(strVerifyCode.Length * 21);

                Bitmap map = new Bitmap(iMapWidth, 28);    //创建图片背景

                Graphics graph = Graphics.FromImage(map);

                graph.Clear(Color.AliceBlue);//清除画面,填充背景

                graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框

                graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式

                Random rand = new Random();

                //背景噪点生成

                Pen blackPen = new Pen(Color.LightGray, 0);

                for (int i = 0; i < 50; i++)

                {

                    int x = rand.Next(0, map.Width);

                    int y = rand.Next(0, map.Height);

                    graph.DrawRectangle(blackPen, x, y, 1, 1);

                }

                //验证码旋转,防止机器识别

                char[] chars = strVerifyCode.ToCharArray();//拆散字符串成单字符数组

                //文字距中

                StringFormat format = new StringFormat(StringFormatFlags.NoClip);

                format.Alignment = StringAlignment.Center;

                format.LineAlignment = StringAlignment.Center;

                //定义颜色

                Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green,

Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

                //定义字体

                string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };

                for (int i = 0; i < chars.Length; i++)

                {

                    int cindex = rand.Next(7);

                    int findex = rand.Next(5); Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)

                    Brush b = new System.Drawing.SolidBrush(c[cindex]);

                    Point dot = new Point(16, 16);

                    float angle = rand.Next(-iRandAngle, iRandAngle);//转动的度数

                    graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置

                    graph.RotateTransform(angle);

                    graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);

                    graph.RotateTransform(-angle);//转回去

                    graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置

                }

                pictureBox1.Image = map;

            }

            catch (ArgumentException)

            {

                MessageBox.Show("创建图片错误。");

            }

        }

        private void button1_Click(object sender, EventArgs e)

        {

            //验证大小写

                char[] ch1 = textBox1.Text.ToCharArray();

                char[] ch2 = strTemp.ToCharArray();

                int nCount = 0;

                for (int i = 0; i < strTemp.Length;i++ )

                {

                    if((ch1[i]>='a'&&ch1[i]<='z')||(ch1[i]>='A'&&ch1[i]<='Z'))

                    {

                        if (ch1[i] - 32 == ch2[i] || ch1[i] + 32 == ch2[i])

                        {

                            nCount++;

                        }

                    }

                    else

                    {

                        if (ch1[i]==ch2[i])

                        {

                            nCount++;

                        }

                    }

                }

                if (nCount==strTemp.Length)

                {

                    MessageBox.Show("验证通过");

                }

                else

                {

                    UpdateVerifyCode();

                    textBox1.Text = "";

                }

            ////不能验证大小写

            //if(textBox1.Text==strTemp)

            //{

            //    MessageBox.Show("验证通过");

            //}

            //else

            //{

            //    UpdateVerifyCode();

            //    textBox1.Text = "";

            //}

        }

        /// <summary>

        /// 图片点击事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void pictureBox1_Click(object sender, EventArgs e)

        {

            UpdateVerifyCode();

        }

    }

}

Ⅳ 请问C语言验证码代码怎么打

用strcmp函数比较两个字符串,你上图一个生成的字符串,另一个输入的字符串,把这两个传递到函数里,函数返回0就说明两个字符串相等,输入正确,反之输入错误。(头文件导入string.h)。

Ⅵ 如何用c语言实现验证码的校验

什么校验方法?
CRC检验如下:

#include<stdio.h>

int binaryToDec(char *str)
{
unsigned n=0;
while(*str!='\0')
{
if(*str<'0'||*str>'9')return -1;
n=n*2+(*str-'0');
str++;
}
return n;
}

void printBinary(int n)
{
if(n>1)printBinary(n/2);
printf("%d",n%2);
}

void main()
{
unsigned n,m,CRC=0x1A8000,fD=0x100000;
char CRC16[32];

while(1)
{
printf("输入16位校验码:");
gets(CRC16);
n=binaryToDec(CRC16);
if(n>65535)
printf("输入值过长,请重新输入\n");
else break;
}

n<<=5;//n左移5位
m=n;//m等于n
while(fD>0x20)
{
while( !(m&fD) && !(CRC&1) )//保证被除数第一位为1
{
CRC>>=1;//除数右移一位
fD>>=1;//被除数首位的标志位右移一位
}
m=m^CRC;//被除数与除数相异或
}
n+=m;//模二余数相加

printf("输出21位校验码:");
printBinary(n);
printf("\n");

getchar();
}

热点内容
怎么看内存卡配置 发布:2025-07-05 12:29:19 浏览:269
访问学者英文个人简历 发布:2025-07-05 12:29:17 浏览:817
1970linux 发布:2025-07-05 12:12:43 浏览:108
解压挑刺 发布:2025-07-05 12:12:12 浏览:536
rarlinux压缩 发布:2025-07-05 12:08:52 浏览:398
手机点菜app怎么连接电脑服务器 发布:2025-07-05 11:13:05 浏览:943
配置控制台干什么用的 发布:2025-07-05 10:54:51 浏览:962
连信从哪里改登录密码 发布:2025-07-05 10:54:12 浏览:399
怎么修改查询密码 发布:2025-07-05 10:49:48 浏览:967
matlab文件存储 发布:2025-07-05 10:40:46 浏览:85