用c语言编写验证码

用c语言编写验证码,第1张

个人觉得,提问者的难点应该是在随机生成4个汉字,至于验证什么的应该不是问题。

4个汉字其实就是8个字节,主要是得搞清楚汉字是扩展ascii嘛的取值范围,然后用随机函数生成这个范围的值就OK了。

什么校验方法?

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()

}

#include //提供printf函数声明定义

#include //提供srand函数声明定义rand

#include //提供time函数

int is_same(int *t,int lo,int x)

int main()

{

int a[10]

int num=20

int t,i

srand(time(0))

//函数提供种即time(0)系统间秒数让rand()函数提供数字每秒都

while(num>0) //循环数

{

for(i=0i<10i++) //获取行10数

{

while(1) //每随机获取数

{

t=rand()%10

if(i==0)

{

a[i]=t

break

}

if(is_same(a,i,t)==0) //必须相同才能获取行数

{

a[i]=t

break

}

}

printf("%d ",t)

}

printf("\n")

num--

}

return 0

}

int is_same(int *t,int lo,int x) //否相同

{

int i

for(i=0i<loi++)

{

if(*(t+i)==x) //相同返真

return 1

}

return 0//否则返假

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11193633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存