700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android请求动态验证码 androidstudio实现图形验证码

android请求动态验证码 androidstudio实现图形验证码

时间:2018-11-18 09:30:47

相关推荐

android请求动态验证码 androidstudio实现图形验证码

androidstudio实现图形验证码

xml文件:

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

android:id="@+id/et_loginactivity_phoneCodes"

android:layout_width="80dp"

android:layout_height="50dp"

android:layout_marginLeft="50dp"

android:layout_marginRight="10dp"

android:layout_marginTop="20dp"

android:layout_weight="3"

android:hint="请输入四位验证"

android:textColor="#000000"

android:textColorHint="#bcbcbc" />

android:id="@+id/iv_loginactivity_showCode"

android:layout_width="95dp"

android:layout_height="63dp"

android:layout_marginTop="10dp"

android:layout_weight="1.5"

android:clickable="true"

/>

java文件:

(主活动代码)

private EditTextmEtloginactivityPhonecodes;

private ImageViewmIvloginactivityShowcode;

private StringrealCode;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mEtloginactivityPhonecodes = findViewById(R.id.et_loginactivity_phoneCodes);

mIvloginactivityShowcode = findViewById(R.id.iv_loginactivity_showCode);

mIvloginactivityShowcode.setImageBitmap(code.getInstance().createBitmap());

realCode = code.getInstance().getCode().toLowerCase(); //将验证码用图片的形式显示出来

mIvloginactivityShowcode.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

mIvloginactivityShowcode.setImageBitmap(code.getInstance().createBitmap());

realCode = code.getInstance().getCode().toLowerCase(); //将验证码用图片的形式显示出来

}

});

login.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

String phoneCode =mEtloginactivityPhonecodes.getText().toString().toLowerCase();

if(phoneCode.length()==0){

Toast.makeText(MainActivity.this,"验证码不能为空",Toast.LENGTH_SHORT).show();

}

else if (!phoneCode.equals(realCode)){

Toast.makeText(MainActivity.this,"验证码错误",Toast.LENGTH_SHORT).show();

}

}

});

}

(随机生成图形验证码)

package com.example.smartcommunityv2;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import java.util.Random;

public class code {

/**

* 随机数数组

* 去除了易混淆的 数字 0 和 字母 o O

* 数字 1 和 字母 i I l L

* 数字 6 和 字母 b

* 数字 9 和 字母 q

* 字母 c C 和 G

* 字母 t (经常和随机线混在一起看不清)

*/

private static final char[]CHARS = {

'2', '3', '4', '5', '7', '8',

'a', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'm',

'n', 'p', 'r', 's', 'u', 'v', 'w', 'x', 'y', 'z',

'A', 'B', 'D', 'E', 'F', 'H', 'J', 'K', 'M',

'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'

};

private static codebmpCode;

public static codegetInstance() {

if(bmpCode ==null)

bmpCode =new code();

return bmpCode;

}

//default settings

//验证码默认随机数的个数

private static final int DEFAULT_CODE_LENGTH =4;

//默认字体大小

private static final int DEFAULT_FONT_SIZE =25;

//默认线条的条数

private static final int DEFAULT_LINE_NUMBER =5;

//padding值

private static final int BASE_PADDING_LEFT =10, RANGE_PADDING_LEFT =15, BASE_PADDING_TOP =15, RANGE_PADDING_TOP =20;

//验证码的默认宽高

private static final int DEFAULT_WIDTH =100, DEFAULT_HEIGHT =40;

//settings decided by the layout xml

//canvas width and height

private int width =DEFAULT_WIDTH, height =DEFAULT_HEIGHT;

//random word space and pading_top

private int base_padding_left =BASE_PADDING_LEFT, range_padding_left =RANGE_PADDING_LEFT,

base_padding_top =BASE_PADDING_TOP, range_padding_top =RANGE_PADDING_TOP;

//number of chars, lines; font size

private int codeLength =DEFAULT_CODE_LENGTH, line_number =DEFAULT_LINE_NUMBER, font_size =DEFAULT_FONT_SIZE;

//variables

private Stringcode;

private int padding_left, padding_top;

private Randomrandom =new Random();

//验证码图片

public BitmapcreateBitmap() {

padding_left =0;

Bitmap bp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);

Canvas c =new Canvas(bp);

code = createCode();

c.drawColor(Color.WHITE);

Paint paint =new Paint();

paint.setAntiAlias(true);

paint.setTextSize(font_size);

//画验证码

for (int i =0; i

randomTextStyle(paint);

randomPadding();

c.drawText(code.charAt(i) +"", padding_left, padding_top, paint);

}

//画线条

for (int i =0; i

drawLine(c, paint);

}

// c.save( Canvas.ALL_SAVE_FLAG );//保存

c.save();//保存

c.restore();//

return bp;

}

public StringgetCode() {

return code;

}

//生成验证码

private StringcreateCode() {

StringBuilder buffer =new StringBuilder();

for (int i =0; i

buffer.append(CHARS[random.nextInt(CHARS.length)]);

}

return buffer.toString();

}

//画干扰线

private void drawLine(Canvas canvas, Paint paint) {

int color = randomColor();

int startX =random.nextInt(width);

int startY =random.nextInt(height);

int stopX =random.nextInt(width);

int stopY =random.nextInt(height);

paint.setStrokeWidth(1);

paint.setColor(color);

canvas.drawLine(startX, startY, stopX, stopY, paint);

}

//生成随机颜色

private int randomColor() {

return randomColor(1);

}

private int randomColor(int rate) {

int red =random.nextInt(256) / rate;

int green =random.nextInt(256) / rate;

int blue =random.nextInt(256) / rate;

return Color.rgb(red, green, blue);

}

//随机生成文字样式,颜色,粗细,倾斜度

private void randomTextStyle(Paint paint) {

int color = randomColor();

paint.setColor(color);

paint.setFakeBoldText(random.nextBoolean()); //true为粗体,false为非粗体

float skewX =random.nextInt(11) /10;

skewX =random.nextBoolean() ? skewX : -skewX;

paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜

//paint.setUnderlineText(true); //true为下划线,false为非下划线

//paint.setStrikeThruText(true); //true为删除线,false为非删除线

}

//随机生成padding值

private void randomPadding() {

padding_left +=base_padding_left +random.nextInt(range_padding_left);

padding_top =base_padding_top +random.nextInt(range_padding_top);

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。