【代码】
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define N 5
int count=0;
void identifyingCode(char s[],int n,int num)
{
char str[]="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i,k,len;
len=strlen(str);
srand(num);
for (i=0;i<n;i++)
{
k=rand()%len;
s[i]=str[k];
}
s[i]='\0';
}
int main()
{
char code[N+1],str[N+1];
int count=0,n=0,i,j;
do
{
identifyingCode(code,N,n+count/3);
printf("请输入五位数验证码:%s\n",code);
scanf("%s",str);
count++;
//想办法把str和code里面大写字母全改小写
for (i=0;i<N;i++)
if (str[i]>=65&&str[i]<=90)
str[i]+=32;
for (j=0;j<N;j++)
if (code[j]>=65&&code[j]<=90)
code[j]+=32;
}while(strcmp(code,str)!=0);
printf("验证正确!\n");
return 0;
}
【解释】
这里定义一个函数用来生成随机验证码,第一个参数是定义好的字符串,第二个参数是验证码个数,第三个参数是随机数种子。
我们可以预先指定好一个str字符串,往里面放所有的数字和大小写字母,然后求出长度,在它长度的范围生成随机数作为下标,在str里面找,把随机数取出来放到原本的字符串code里。
然后mian函数里面用do while循环,循环条件还是code与用户输入的str是否全等的比较,不过在do里面,我们要把生成的验证码code和自己输入的str里面所有的大写都改成小写,达成一视同仁的目的。同时用count给循环计数,超过3,count/3就会加1,改变随机数种子,生成不一样的验证码。