Net验证码的实现

1、纯数字验证码的实现
  
纯数字验证码的实现相对比较简单,可通过以下两种方法来实现
  (1)使用随机数方式,代码如下: 

        private String GetRandomint(int codeCount)
        {
            Random random 
= new Random();
            
string min = "";
            
string max = "";
            
for (int i = 0; i < codeCount; i++)
            {
                min 
+="1";
                max
+="9";
            }
                
return (random.Next(Convert.ToInt32(min),Convert.ToInt32(max)).ToString());
        }


   (2)使用随机组合方式,代码如下:

         private   string  CreateRandomCode( int  codeCount)
        {
            
string  allChar  =   " 0,1,2,3,4,5,6,7,8,9 "
            
string [] allCharArray  =  allChar.Split( ' , ' ); 
            
string  randomCode  =   ""
            
int  temp  =   - 1
            Random rand 
=   new  Random(); 
            
for  ( int  i  =   0 ; i  <  codeCount; i ++
            { 
                
if  (temp  !=   - 1
                { 
                    rand 
=   new  Random(i  *  temp  *  (( int )DateTime.Now.Ticks)); 
                } 
                
int  t  =  rand.Next( 9 ); 
                
if  (temp  ==  t) 
                { 
                    
return  CreateRandomCode(codeCount); 
                } 
                temp 
=  t; 
                randomCode 
+=  allCharArray[t]; 
            } 
            
return  randomCode;
        }


  2、数字+字母验证码的实现,代码如下:

         private   string  CreateRandomCode( int  codeCount)
        {
            
string  allChar  =   " 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z "
            
string [] allCharArray  =  allChar.Split( ' , ' ); 
            
string  randomCode  =   ""
            
int  temp  =   - 1
            Random rand 
=   new  Random(); 
            
for  ( int  i  =   0 ; i  <  codeCount; i ++
            { 
                
if  (temp  !=   - 1
                { 
                    rand 
=   new  Random(i  *  temp  *  (( int )DateTime.Now.Ticks)); 
                } 
                
int  t  =  rand.Next( 61 ); 
                
if  (temp  ==  t) 
                { 
                    
return  CreateRandomCode(codeCount); 
                } 
                temp 
=  t; 
                randomCode 
+=  allCharArray[t]; 
            } 
            
return  randomCode;
        }


  3、汉字验证码的实现,代码如下: 

         /**/
        
/*  
    此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将 
    四个字节数组存储在object数组中。 
    参数:strlength,代表需要产生的汉字个数 
    
*/
        
public   static   object [] CreateRegionCode( int  strlength)
        {
            
// 定义一个字符串数组储存汉字编码的组成元素 
             string [] rBase  =   new  String[ 16 ] {  " 0 " " 1 " " 2 " " 3 " " 4 " " 5 " " 6 " " 7 " " 8 " " 9 " " a " " b " " c " " d " " e " " f "  };
            Random rnd 
=   new  Random();
            
// 定义一个object数组用来 
             object [] bytes  =   new   object [strlength];

            
/**/
            
/* 每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中 
         每个汉字有四个区位码组成 
         区位码第1位和区位码第2位作为字节数组第一个元素 
         区位码第3位和区位码第4位作为字节数组第二个元素 
        
*/
            
for  ( int  i  =   0 ; i  <  strlength; i ++ )
            {
                
// 区位码第1位 
                 int  r1  =  rnd.Next( 11 14 );
                
string  str_r1  =  rBase[r1].Trim();

                
// 区位码第2位 
                rnd  =   new  Random(r1  *   unchecked (( int )DateTime.Now.Ticks)  +  i); // 更换随机数发生器的种子避免产生重复值 
                 int  r2;
                
if  (r1  ==   13 )
                {
                    r2 
=  rnd.Next( 0 7 );
                }
                
else
                {
                    r2 
=  rnd.Next( 0 16 );
                }
                
string  str_r2  =  rBase[r2].Trim();

                
// 区位码第3位 
                rnd  =   new  Random(r2  *   unchecked (( int )DateTime.Now.Ticks)  +  i);
                
int  r3  =  rnd.Next( 10 16 );
                
string  str_r3  =  rBase[r3].Trim();

                
// 区位码第4位 
                rnd  =   new  Random(r3  *   unchecked (( int )DateTime.Now.Ticks)  +  i);
                
int  r4;
                
if  (r3  ==   10 )
                {
                    r4 
=  rnd.Next( 1 16 );
                }
                
else   if  (r3  ==   15 )
                {
                    r4 
=  rnd.Next( 0 15 );
                }
                
else
                {
                    r4 
=  rnd.Next( 0 16 );
                }
                
string  str_r4  =  rBase[r4].Trim();

                
// 定义两个字节变量存储产生的随机汉字区位码 
                 byte  byte1  =  Convert.ToByte(str_r1  +  str_r2,  16 );
                
byte  byte2  =  Convert.ToByte(str_r3  +  str_r4,  16 );
                
// 将两个字节变量存储在字节数组中 
                 byte [] str_r  =   new   byte [] { byte1, byte2 };

                
// 将产生的一个汉字的字节数组放入object数组中 
                bytes.SetValue(str_r, i);
            }
            
return  bytes;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值