Android 图形验证码
时间: 2025-02-07 10:33:48 浏览: 56
### Android 应用中实现图形验证码
#### 创建验证码生成器类
为了在应用程序中创建图形验证码,首先需要构建一个能够生成随机字符并将其转换成图像的工具类。此过程涉及到了字符串操作以及画布绘制等内容。
```java
public class Code {
private static final String VAL_CODE = "23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
public synchronized String getCode() {
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 4; ++i) { // 假设验证码长度为4位
int number = random.nextInt(VAL_CODE.length());
sb.append(VAL_CODE.charAt(number));
}
return sb.toString();
}
}
```
该方法通过`getCode()`函数返回由大小写字母和数字组成的四位随机字符串作为验证码[^1]。
#### 将验证码渲染为图片形式展示给用户
接下来要做的就是把上述得到的文字型验证码转化为可视化的图像格式,并设置到ImageView组件上供用户体验验证功能:
```java
Bitmap bitmap;
Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = findViewById(R.id.imageView);
realCode = code.getInstance().getCode().toLowerCase();
bitmap = Bitmap.createBitmap((int) getResources().getDimension(R.dimen.width),
(int) getResources().getDimension(R.dimen.height),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
paint = new Paint();
...
drawText(canvas, realCode);
imageView.setImageBitmap(bitmap);
}
private void drawText(Canvas canvas, String text){
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
float x = (bitmap.getWidth() - bounds.width()) / 2f;
float y = (bitmap.getHeight() + bounds.height()) / 2f;
canvas.drawText(text, x, y, paint);
}
```
这里定义了一个名为`drawText()`的方法来负责实际绘图工作,在其中计算好位置参数之后调用了Canvas对象上的`drawText()`来进行文字描绘;最后再利用ImageView控件加载这张包含了最新生成好的验证码图案的BitMap实例完成界面呈现。
#### 获取用户输入并与服务器端校验
当用户提交表单时,应该获取EditText中的内容并与之前保存下来的正确答案做对比判断是否一致:
```java
Button buttonSubmit = findViewById(R.id.button_submit);
buttonSubmit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
EditText et_phoneCode = findViewById(R.id.et_phoneCodes);
String user_input_code = et_phoneCode.getText().toString().trim().toLowerCase();
if(user_input_code.equals(realCode)){
Toast.makeText(MainActivity.this,"Verification succeeded",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this,"Incorrect verification code!",Toast.LENGTH_SHORT).show();
}
}
});
```
这段代码片段展示了如何监听按钮点击事件,并从中提取编辑框内的文本进行比较逻辑处理[^2]。
阅读全文
相关推荐

















