验证码相似问题
产生随机验证码时,类似数字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 }
不积小流无以成江河