验证码相似问题

产生随机验证码时,类似数字1和小写字母l经常容易让人混淆分不清楚,

因此,产生随机验证码时应避免此情况

1(一)、l(哎哦)、I (哎)中三个任意两个或者全部不可同时存在

0(零)、o(小写 哦)、O(大写哦)中三个任意两个或者全部不可同时存在

代码如下

  1 #include<iostream>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 #include<time.h>
  5 using namespace std;
  6 bool I_l(char *p)//查看 I和l是否同时存在,下同
  7 {
  8     int a = 0,f1=0,f2=0;
  9     while(p[a]!='I'&&a!=5)
 10         ++a;
 11     if(p[a] == 'I')
 12         f1=1;
 13     a=0;
 14     while(p[a]!='l'&&a!=5)
 15         ++a;
 16     if(p[a] == 'l')
 17         f2=1;
 18     return f1+f2==2 ? true : false;
 19 }
 20 bool I_1(char *p)
 21 {
 22     int a = 0,f1=0,f2=0;
 23     while(p[a]!='I'&&a!=5)
 24         ++a;
 25     if(p[a] == 'I')
 26         f1=1;
 27     a=0;
 28     while(p[a]!='1'&&a!=5)
 29         ++a;
 30     if(p[a] == '1')
 31         f2=1;
 32     return f1+f2==2 ? true : false;
 33 }
 34 bool l_1(char  *p)
 35 {
 36     int a = 0,f1=0,f2=0;
 37     while(p[a]!='l'&&a!=5)
 38         ++a;
 39     if(p[a] == 'l')
 40         f1=1;
 41     a=0;
 42     while(p[a]!='1'&&a!=5)
 43         ++a;
 44     if(p[a] == '1')
 45         f2=1;
 46     return f1+f2==2 ? true : false;
 47 }
 48 bool o_0(char *p)
 49 {
 50     int a = 0,f1=0,f2=0;
 51     while(p[a]!='o'&&a!=5)
 52         ++a;
 53     if(p[a] == 'o')
 54         f1=1;
 55     a=0;
 56     while(p[a]!='0'&&a!=5)
 57         ++a;
 58     if(p[a] == '0')
 59         f2=1;
 60     return f1+f2==2 ? true : false;
 61 }
 62 bool O_0(char *p)
 63 {
 64     int a = 0,f1=0,f2=0;
 65     while(p[a]!='0'&&a!=5)
 66         ++a;
 67     if(p[a] == '0')
 68         f1=1;
 69     a=0;
 70     while(p[a]!='O'&&a!=5)
 71         ++a;
 72     if(p[a] == 'O')
 73         f2=1;
 74     return f1+f2==2 ? true : false;
 75 }
 76 void put(char *a, char *b)
 77 {
 78     int nu = 0,i = 0;
 79     srand(time(NULL));//由时间产生随机数(伪)
 80     while(nu != 5)        //填满数组
 81     {
 82         a[nu] = b[rand()%62];
 83         ++nu;
 84     }
 85     if(I_l(a) || I_1(a) || l_1(a) || o_0(a) || O_0(a))//检测是否有不允许出现的组合
 86         put(a, b);
 87     return;
 88 }
 89 void main()
 90 {
 91     //char *p = "0123456lllllcdefghijkliiiiirst000000ABOOOOOHIJKLMNOPQRSTIIIIII";//测试数据2,,,容易崩。。。
 92     char *p = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//符合题意的测试数据
 93     int nu = 0;
 94     char eare[5] = {};
 95     put(eare, p);
 96     while(nu != 5)
 97     {
 98         cout<<eare[nu]<<" ";
 99         ++nu;
100     }
101     cout<<endl;
102 }

 

posted @ 2018-12-09 20:44  C_hp  阅读(265)  评论(0编辑  收藏  举报