生成图形验证码校验类

packagecom.chao.createcode;importjava.util.Random;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.Bitmap.Config;publicclassCode{privatestaticfinalchar[]CHARS={'2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z'};privatestaticCodebmpCode;publicstaticCodegetInstance(){if(bmpCode==null)bmpCode=newCode();returnbmpCode;}//defaultsettingsprivatestaticfinalintDEFAULT_CODE_LENGTH=4;privatestaticfinalintDEFAULT_FONT_SIZE=25;privatestaticfinalintDEFAULT_LINE_NUMBER=2;privatestaticfinalintBASE_PADDING_LEFT=10,RANGE_PADDING_LEFT=15,BASE_PADDING_TOP=15,RANGE_PADDING_TOP=20;privatestaticfinalintDEFAULT_WIDTH=100,DEFAULT_HEIGHT=40;//settingsdecidedbythelayoutxml//canvaswidthandheightprivateintwidth=DEFAULT_WIDTH,height=DEFAULT_HEIGHT;//randomwordspaceandpading_topprivateintbase_padding_left=BASE_PADDING_LEFT,range_padding_left=RANGE_PADDING_LEFT,base_padding_top=BASE_PADDING_TOP,range_padding_top=RANGE_PADDING_TOP;//numberofchars,lines;fontsizeprivateintcodeLength=DEFAULT_CODE_LENGTH,line_number=DEFAULT_LINE_NUMBER,font_size=DEFAULT_FONT_SIZE;//variablesprivateStringcode;privateintpadding_left,padding_top;privateRandomrandom=newRandom();//验证码图片publicBitmapcreateBitmap(){padding_left=0;Bitmapbp=Bitmap.createBitmap(width,height,Config.ARGB_8888);Canvasc=newCanvas(bp);code=createCode();c.drawColor(Color.WHITE);Paintpaint=newPaint();paint.setTextSize(font_size);for(inti=0;i<code.length();i++){randomTextStyle(paint);randomPadding();c.drawText(code.charAt(i)+"",padding_left,padding_top,paint);}for(inti=0;i<line_number;i++){drawLine(c,paint);}c.save(Canvas.ALL_SAVE_FLAG);//保存c.restore();//returnbp;}publicStringgetCode(){returncode;}//验证码privateStringcreateCode(){StringBuilderbuffer=newStringBuilder();for(inti=0;i<codeLength;i++){buffer.append(CHARS[random.nextInt(CHARS.length)]);}returnbuffer.toString();}privatevoiddrawLine(Canvascanvas,Paintpaint){intcolor=randomColor();intstartX=random.nextInt(width);intstartY=random.nextInt(height);intstopX=random.nextInt(width);intstopY=random.nextInt(height);paint.setStrokeWidth(1);paint.setColor(color);canvas.drawLine(startX,startY,stopX,stopY,paint);}privateintrandomColor(){returnrandomColor(1);}privateintrandomColor(intrate){intred=random.nextInt(256)/rate;intgreen=random.nextInt(256)/rate;intblue=random.nextInt(256)/rate;returnColor.rgb(red,green,blue);}privatevoidrandomTextStyle(Paintpaint){intcolor=randomColor();paint.setColor(color);paint.setFakeBoldText(random.nextBoolean());//true为粗体,false为非粗体floatskewX=random.nextInt(11)/10;skewX=random.nextBoolean()?skewX:-skewX;paint.setTextSkewX(skewX);//float类型参数,负数表示右斜,整数左斜//paint.setUnderlineText(true);//true为下划线,false为非下划线//paint.setStrikeThruText(true);//true为删除线,false为非删除线}privatevoidrandomPadding(){padding_left+=base_padding_left+random.nextInt(range_padding_left);padding_top=base_padding_top+random.nextInt(range_padding_top);}}


Activity代码

packagecom.chao.createcode;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ImageView;importandroid.widget.Toast;publicclassMainActivityextendsActivityimplementsOnClickListener{privateImageViewiv_showCode;privateEditTextet_phoneCode;privateEditTextet_phoneNum;//产生的验证码privateStringrealCode;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_phoneCode=(EditText)findViewById(R.id.et_phoneCodes);Buttonbut_toSetCode=(Button)findViewById(R.id.but_forgetpass_toSetCodes);but_toSetCode.setOnClickListener(this);iv_showCode=(ImageView)findViewById(R.id.iv_showCode);//将验证码用图片的形式显示出来iv_showCode.setImageBitmap(Code.getInstance().createBitmap());realCode=Code.getInstance().getCode();iv_showCode.setOnClickListener(this);}@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.iv_showCode:iv_showCode.setImageBitmap(Code.getInstance().createBitmap());realCode=Code.getInstance().getCode();System.out.println(realCode);break;caseR.id.but_forgetpass_toSetCodes:StringphoneCode=et_phoneCode.getText().toString();if(phoneCode.equalsIgnoreCase(realCode)){Toast.makeText(MainActivity.this,phoneCode+"验证码正确",Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this,phoneCode+"验证码错误",Toast.LENGTH_SHORT).show();}break;}}}


布局XML

<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:background="@color/main_color_white"><TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="找回密码"android:textColor="@color/loan_butBackground"android:textSize="20sp"/></RelativeLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="40dp"android:layout_marginTop="30dp"android:orientation="vertical"android:layout_marginLeft="15dp"android:layout_marginRight="15dp"android:background="@drawable/linearlayout01"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_vertical"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:text="中国+86"android:textColor="#A2CD5A"android:textSize="16sp"/><Viewandroid:layout_width="0.1dp"android:layout_height="match_parent"android:background="@color/loan_butBackground"/><EditTextandroid:id="@+id/et_forgetPass_PhoneNum"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:background="@null"android:digits="0123456789"android:hint="请填入您的手机号"android:inputType="number"android:maxLength="11"android:textSize="16sp"/></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="15dp"android:layout_marginRight="15dp"android:layout_marginTop="20dp"android:orientation="horizontal"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="40dp"android:background="@drawable/linearlayout01"><EditTextandroid:id="@+id/et_phoneCodes"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:background="@null"android:hint="请输入右侧验证码"/></LinearLayout><ImageViewandroid:id="@+id/iv_showCode"android:layout_width="100dp"android:layout_marginLeft="10dp"android:layout_height="match_parent"/></LinearLayout><Buttonandroid:id="@+id/but_forgetpass_toSetCodes"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:background="@drawable/buttonshape"android:text="获取手机验证码"android:textColor="@color/main_color_white"/></LinearLayout>


参考网站:

http://dwtedx.com/itshare_349.html

附件:http://down.51cto.com/data/2366105